코테 노트/프로그래머스

Level 2 튜플 <2019 카카오 인턴십> Python 3

화요밍 2021. 9. 6. 10:04
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/64065?language=python3 

 

코딩테스트 연습 - 튜플

"{{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

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def solution(s):
    answer = []
    s = s[2:-2]
    ss = s.split('},{')
    ss.sort(key = len)
    for ns in ss:
        ns = ns.split(',')
        for n in ns:
            if n not in answer: answer.append(n)
    return list(map(int, answer))

풀이 과정

풀이 시간 28분

1.

def solution(s):
    answer = []
    
    #1. 가장 자리 {{, }} 없애기 -> ex) "{{2},{2,1},{2,1,3},{2,1,3,4}}" -> "2},{2,1},{2,1,3},{2,1,3,4"
    s = s[2:-2]
    
    #2. '},{'마다 문자열 자르기 -> ex) "2},{2,1},{2,1,3},{2,1,3,4" -> [['2'], ['2','1'], ['2','1','3'], ['2','1','3','4']]
    ss = s.split('},{')
    
    #3. 리스트 길이를 기준으로 오름차순으로 정렬하기
    ss.sort(key = len)
    
    #4. ss를 탐색하면서 answer에 없는 요소 추가하기
    for ns in ss:
        ns = ns.split(',')
        for n in ns:
            if n not in answer: answer.append(n)
    return list(map(int, answer))
#시간복잡도 = O(nlogn), 공간복잡도 = O(n)
#n = len(s)

 

2.

def solution(s):
    answer = []
    
    #1. 가장 바깥 {} 없애기
    s = s[1:-1]
    
    #2. sets = 튜플 s의 모든 집합 구성하기
    sets = []
    #nset = 새로 추가될 튜플 s의 집합
    nset = []
    num = ""
    for ss in s:
    	# '{'이면 다음 새로운 집합을 받아오기 위해 nset 초기화
        if ss == '{': nset = []
        
        # '}'이면 새로운 집합 nset의 마지막 원소 num을 추가하고(이때, 다음 새로운 원소를 받아오기 위해 num 초기화), sets에 nset을 추가한다.
        elif ss == '}': 
            nset.append(int(num))
            num = ""
            sets.append(nset)
            
        # ','이고 num에 원소가 있는 경우 -> ex) {1, 2} ss = ',' num = '1'
        elif ss == ',':
            if num != "":
      			#새로운 집합에 원소 num을 추가하고, num 초기화
                nset.append(int(num))
                num = ""
        
        # 숫자인 경우, num에 붙여준다
        else: num += ss
        
    #3. 튜플 s의 모든 집합 sets의 집합들을 길이 순서대로 오름차순 정렬하기
    sets.sort(key = len)
    
    #4. sets의 각 집합들을 탐색하여 answer에 없는 원소가 들어있는 경우, answer에 추가하기
    for t in sets:
        for tt in t:
            if tt not in answer:
                answer.append(tt)
    return answer
#시간복잡도 = O(nlogn), 공간복잡도 = O(n)
#n = len(s)

참고

 

Level 1 크레인 인형뽑기 게임 <2019 카카오 인턴> Python 3

https://programmers.co.kr/learn/courses/30/lessons/64061?language=python3 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 pro..

hwayomingdlog.tistory.com

 

Level 3 불량 사용자 <2019 카카오 개발자 겨울 인턴십> Python 3

https://programmers.co.kr/learn/courses/30/lessons/64064?language=python# 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상..

hwayomingdlog.tistory.com

 

Level 3 징검다리 건너기 <2019 카카오 인턴십> Python3

https://programmers.co.kr/learn/courses/30/lessons/64062?language=python3 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 최종 코드 GitHub -> https://github.co..

hwayomingdlog.tistory.com

 

728x90
반응형