본문 바로가기
알고리즘/프로그래머스

[python] 튜플 (2019 카카오 개발자 겨울 인턴십)

by Garonguri 2021. 8. 31.
728x90

[한줄평]

 

직관적인 문제였다. 문자열을 가공하기 쉬운 형태로 변형하는게 귀찮았을 뿐

 

[풀이]

 

0. 문제를 풀기 전 한 생각

=> {A1}, {A1, A2}, ... {A1, A2, ... An} 순으로 만들어진 집합이므로 일단 숫자를 구분해준 후, 집합의 길이가 작은 순으로 정렬을 하면 되지 않을까? 한가지 크기의 집합은 ONLY 1개니까.

=> 크기 순으로 정렬된 집합에서 맨 첫번째 오는 집합 (크기가 1인 집합, {A1})은 무조건 튜플의 맨 첫번째 숫자겠다.

=> 그 다음 나머지 집합에서 A1을 없애주면, 크기가 2인 집합은 A1을 지움으로써 크기가 1인 집합이 될테니 그것이 바로 튜플의 두 번째 숫자겠다.

=> ... 이렇게 해서 맨 끝까지 돌리면 되지 않을까? 를 생각하고 진행하였다.

 

1. 일단 입력받은 집합 기호 ex) "{{20,111},{111}}" 중 연속된 숫자를 파악해주었다. 현재 문자가 숫자라고 가정한 뒤 그 다음 문자가 어떤 것이냐에 따라 케이스를 분류하였다.

1-1. 현재 숫자이고, 다음 문자도 숫자인 경우  :  "{{20,111},{111}}" 연속된 숫자이므로 ssub 배열에 넣어줌.

1-2. 현재 숫자이고, 다음 문자가 "," 인 경우 : "{{20,111},{111}}" 한 숫자가 끝나는 경우이므로 숫자를 ssub에 넣은 후 ssub배열을 join해주고 (연속된 문자를 합쳐 주고) sub 배열에 넣어준 뒤, 아직 집합이 안끝났으므로 ssub = []으로 초기화해준다.

1-3. 현재 숫자이고, 다음 문자가 "}"인 경우 : "{{20,111},{111}}" 한 집합이 끝나는 경우이므로 숫자를 ssub에 넣은 후 ssub배열을 join해준 뒤 sub배열에 넣어준다. 이 sub 배열을 (한 집합을) li 라는 배열에 넣어준다. 

 

1과 같은 코드를 짠 이유 : 중괄호로 표시된 이 문자열을 리스트로 구분하고 싶었기 때문

 

2. 이렇게 만들어준 리스트를 오름차순 크기 순으로 정렬한다.

3. 가장 첫 번째 원소를 answer에 넣고, 전체 리스트에서 answer을 지운 뒤, list 전체를 순회할 때 까지 반복한다.

 

 

 

728x90

댓글