매일 매일 성장하는 섭섭군

[Seop's의 코드풀이] 프로그래머스 튜플 (2019 카카오 개발자 겨울 인턴십 문제) Python 본문

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

[Seop's의 코드풀이] 프로그래머스 튜플 (2019 카카오 개발자 겨울 인턴십 문제) Python

섭섭군 2020. 4. 22. 15:48
반응형

이번에 풀어본 문제는 프로그래머스에 있는 튜플 이라는 문제입니다.

2019 카카오 개발자 인턴십을 뽑을때 코딩테스트로 진행되었던 문제인데요 한번 살펴보도록 하겠습니다.

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제를 정리하자면 

입력은 문자열로 주어지며 문자열 안에는 중괄호로 구분되어있는 튜플이 존재합니다.

튜플의 각 원소들이 위의 문제의 규칙에 따라서 어떤 순서로 이루어지는 알아내면 됩니다.

 

예를들어 (2,1,3,4) 튜플의 경우에는  {{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}} 이렇게 표현 할 수 있습니다.

즉 문자열로 주어진 튜플의 길이의 경우에 따라서 살펴본다면

튜플의 길이 포함 될 수 있는 원소들
1 2
2 2, 1
3 2,1,3
4 2,1,3,4

튜플의 길이에 따라 올 수 있는 원소는 정해져 있습니다.

저는 딕셔너리를 다음과 같이 만들어 보았습니다.

 

ans_dict = { (해당원소): (해당원소가 포함되며 가장 적은 길이의 튜플 길이)}

 

이러한 방식으로 딕셔너리를 만들고 적재해보면 다음과 같은 결과가 나옵니다.

 

{2: 1, 1: 2, 3: 3, 4: 4}

 

 즉 value 값에 해당하는 것이 우리가 찾고자 하는 튜플 원소의 순서 입니다.

 

혹시 더 좋은 방법을 알고 계신 분이 계시다면 피드백 해주시면 감사할 것 같습니다.

감사합니다.

 

전체 코드는 다음과 같습니다.

def solution(s):
    answer = []
    num_list = []
    buf = ""
    index = 0

    #  처리하기 쉽게 list로 만들어 놓는 작업
    for i in range(1, len(s)-1 ) :
        if s[i] == "{" :
            index = i+1
        elif s[i] == "}" :
            buf = s[index : i]
            num_list.append(list(map(int, buf.split(","))))
            buf = ""
    
    #  dict 형식으로 만들어 해당하는 숫자가 어느 위치에 있는지 확인
    ans_dict = dict()
    for i in num_list :
        for j in i :
            if j in ans_dict :
                if ans_dict[j] > len(i) :
                    ans_dict[j] = len(i)
            else :
                ans_dict[j] = len(i)
    
    #  ditc 를 value 값을 기준으로 정렬하여 정답에 적재하는 작업
    buf = sorted(ans_dict.items(), key= lambda x: x[1])
    for i in buf :
        answer.append(i[0])
    return answer

 

 

 

 

 

 

반응형
Comments