코딩테스트 연습 - 튜플 | 프로그래머스 (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