[한줄평]
직관적인 문제였다. 문자열을 가공하기 쉬운 형태로 변형하는게 귀찮았을 뿐
[풀이]
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 전체를 순회할 때 까지 반복한다.

'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 신고 결과 받기 - Kakao 2022 Blind Recruitment (0) | 2022.03.12 |
---|---|
[python] 징검다리 건너기 (2019 카카오 개발자 겨울 인턴십) (0) | 2021.09.02 |
[python] 크레인 인형뽑기 게임 (2019 카카오 개발자 겨울 인턴십) (0) | 2021.08.31 |
댓글