알고리즘 풀이/프로그래머스

[Level 2] 튜플

mhko411 2021. 2. 26. 17:20
728x90

programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr


접근

문자열로 들어오는 것이 리스트의 형태로 들어온다면 굉장히 쉬운문제라고 생각했다. 

그래서 입력된 문자열을 리스트로 변환하는 과정을 거쳤으며 이후에 2차원 리스트가 생성이 되었고 2차원 안의 리스트들의 길이에 따라 오름차순으로 정렬하여 문제에서 원하는 답을 구하였다.

 

구현

입력된 문자열을 탐색한다.

숫자가 들어온다면 word라는 빈 문자열에 하나씩 추가해나간다.

그리고 쉼표가 들어온다면 word에 생성된 숫자를 tmp라는 리스트에 추가한다. 또한 닫는 중괄호가 들어왔을 때 word가 남아있으면 해당 word도 int형으로 tmp에 추가한다. 

그리고 tmp에 어떠한 원소가 있을 시 lst라는 리스트에 추가하여 입력된 문자열을 리스트로 하나씩 변환해나간다.

   for i in range(len(s)):
        if s[i].isdecimal():
            word += s[i]
        elif s[i] == ',':
            if word:
                tmp.append(int(word))
                word = ''
        elif s[i] == '}':
            if word:
                tmp.append(int(word))
                word = ''
            if tmp:
                lst.append(tmp)
                tmp = []

 

입력된 문자열을 리스트로 변환한 lst를 안에 포함된 리스트들의 길이를 기준으로 오름차순 정렬한다.

이후 각 원소들을 탐색하면서 answer에 추가되지 않은 숫자들을 순서대로 추가하여 문제에서 주어진 출력형식을 맞춘다.

lst = sorted(lst, key=lambda x: len(x))
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if lst[i][j] not in answer:
                answer.append(lst[i][j])

전체 코드

def solution(s):
    answer = []
    lst = []
    tmp = []
    word = ''
    for i in range(len(s)):
        if s[i].isdecimal():
            word += s[i]
        elif s[i] == ',':
            if word:
                tmp.append(int(word))
                word = ''
        elif s[i] == '}':
            if word:
                tmp.append(int(word))
                word = ''
            if tmp:
                lst.append(tmp)
                tmp = []
    
    lst = sorted(lst, key=lambda x: len(x))
    for i in range(len(lst)):
        for j in range(len(lst[i])):
            if lst[i][j] not in answer:
                answer.append(lst[i][j])
    return answer

 

다른사람의 풀이

아래의 코드가 좀 더 파이썬스러운 코드다.

strip과 split을 활용할 생각을 하지 못했다.

def solution(s):
    answer = []

    s1 = s.lstrip('{').rstrip('}').split('},{')

    new_s = []
    for i in s1:
        new_s.append(i.split(','))

    new_s.sort(key = len)

    for i in new_s:
        for j in range(len(i)):
            if int(i[j]) not in answer:
                answer.append(int(i[j]))

    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 같은 숫자는 싫어  (0) 2021.02.28
[Level 2] 큰 수 만들기  (0) 2021.02.27
[Level 2] 다음 큰 숫자  (0) 2021.02.26
[Level 2] 숫자의 표현  (0) 2021.02.24
[Level 3] N-Queen  (0) 2021.02.24