코딩테스트 연습 - 튜플 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 튜플

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

풀이)

접근방식)

문자열이 표현하는 튜플을 알아내기 위해서는 문자열 s에 담긴 부분집합들을 분리하고 순서도 맞춰야 한다고 생각했음

알고리즘)

  • 문자열s를 '}' 문자를 기준으로 split() 
  • 분리된 각 문자열들을 확인하며 빈 문자열이 아닌 경우에 list1에 0을 추가(부분집합의 갯수 카운팅)
  • 다시 각 문자열들을 확인하며 '{' 문자 제거 '1,2,3,4' 와 같은 형태가 됨
  • 문자열들을 ',' 문자를 기준으로 split()하여 리스트 형태로 분리 -> 리스트의 길이별로 list1[len]에 삽입
  • list1을 1부터 n(원소의 갯수)까지 리스트 형태의 부분집합들을 탐색하며 빠진 answer에 없는 원소들을 차례대로 추가

코드)

def solution(s):
    answer = []
    l = s.split('}') # '}'을 기준으로 문자열 분리 (문자열s가 부분집합들로 분리 )
    max = 0
    list1 = []
    for strs in l: # 
        if strs:
            list1.append(0)

    for strs in l:
        if strs:  
            strs = strs.replace('{','') # '{' 필요없는 문자 삭제
        
            if strs[0] == ',':
                strs = strs[1:]
           
            strs = strs.split(',') # ',' 문자를 기준으로 split()하여 리스트 형태로 분리
            list1[len(strs)-1] = strs # 부분집합의 크기별로 list1에 추가
    ans = []
    for l in list1: #리스트 형태의 부분집합들을 탐색하며 빠진 answer에 없는 원소들을 차례대로 추가
        for i in l:
            if i not in ans:
                ans.append(i)
    for i in ans:
        answer.append(int(i))
    
    return answer

 

 

     

'프로그래머스' 카테고리의 다른 글

후보키  (0) 2021.10.18
괄호 회전하기  (0) 2021.10.18
조이스틱  (0) 2021.10.03
다음 큰 숫자  (0) 2021.10.03
거리두기 확인  (0) 2021.10.03

+ Recent posts