블로그 이름 뭐로 하지

[알고리즘] 프로그래머스 - 튜플 본문

알고리즘

[알고리즘] 프로그래머스 - 튜플

발등이 따뜻한 사람 2023. 12. 30. 18:07

문제

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

풀이

얘도 예전에 풀었던 문제인데, 그 당시엔 문자열에서 숫자를 뽑아내서 배열을 만들 때 정규식을 활용했었다.

근데 사실 난 정규식 사용을 잘 못한다 ^ . ^ 그니까 검색해서 하는건 할 수 있어도 코딩테스트 때 아무것도 없이 짜라고 했으면 정규식으로는 못 짰을거다....

그래서 이번엔 정규식을 안 쓰고 그냥 스택을 활용해서 { 으로 열릴 때랑 }으로 닫힐때는 판단하고 쉼표로 다른 숫자가 나올 때를 고려해서 풀었다.

 

근데 다 풀고 나니까 split()함수가 생각이 나서...이 함수를 이용해서 하니 확실히 훨씬 간단한 코드가 되더라. 이 코드는 맨 밑에 첨부해놨다!

 

정답 코드

from collections import deque
def solution(s):
    
    new_arr = []
    
    arr = list(s)
    arr = arr[1:-1]
    
    q = deque(arr)
    while q:
        cnt = q.popleft()
        
        if cnt == '{':
            num = ''
            cnt_arr = []
            while True:
                word = q.popleft()
                
                if word == '}':
                    cnt_arr.append(num)
                    new_arr.append(cnt_arr)
                    break
                elif word == ',':
                    cnt_arr.append(num)
                    num = ''
                else:
                    num += word
                    
    
    new_arr.sort(key=lambda x:len(x))
    
    answer = []
    for array in new_arr:
        for num in array:
            num = int(num)
            if num not in answer:
                answer.append(num)
                
    return answer

 

 

그 외

def solution(s):
    # {{, }}를 제거 후 },{ 으로 나누기
    data = s[2:-2].split("},{")
    # 길이 별로 오름차순 정렬
    data = sorted(data, key=lambda x: len(x))
    answer = []
    for item in data:
        # 각각의 원소로 분류 후
        item = list(map(int, item.split(",")))
        for value in item:
            # 포함되어 있지 않으면 input
            if value not in answer:
                answer.append(value)
    return answer

 

문자열에서 배열을 뽑아내는 부분 말고는 똑같은 것 같은데, 배열을 뽑아내는 부분이 훨~~씬 간단하다 ㅎㅎ 왜 split 생각을 못했는지...그래도 뭐 머리 굴려서 풀었음 된거지!