def solution(s):
s = list(s[1:len(s)-1])
stack1 = []
stack2 = []
stack3 = []
for i in s:
if i != '{' and i != '}' and i != ',':
stack1.append(i)
elif i == ',' and stack1 != []:
stack2.append(stack1)
stack1 = []
elif i == '}':
if stack1 != []:
stack2.append(stack1)
stack1 = []
stack3.append(stack2)
stack2 = []
answer = []
for i in stack3:
change = [''.join(j) for j in i]
answer.append(list(map(int, change)))
answer.sort(key=lambda x:len(x))
result = []
for i in answer:
for j in i:
if j not in result:
result.append(j)
return result
입출력 예

풀이과정
주의해야 할 점
- 주어진 s는 문자열이다.
- 문자열이기 때문에 20은 숫자 20이 아닌 문자 2와 0이다.
{{20,111},{111}}
를 예로 들어보자.
- s에 맨 앞의 '{'와 맨 뒤의 '}'를 제외한
{20,111},{111}
를 넣는다.
- 문자열 반복문을 돌면서 숫자 형태의 문자열은 stack1에 넣는다. stack1에는
[ '2', '0' ]
이 들어 있다.
- ','가 나오면 stack1 배열을 stack2에 넣는다.
- '}'가 나오면 stack2를 stack3에 넣는다. stack3에는
[[['2', '0'], ['1', '1', '1']], [['1', '1', '1']]]
가 담겨있다.
- 각 배열의 문자열을 join하고 answer에 넣는다. 이후 answer를 정렬한다. 그럼 정답 배열에 담길 순서가 정해진다.
- answer 배열을 돌면서 result에 있지 않은 값을 넣어준다. 예를 들어
answer = [[111], [20, 111]]
일 때, result에는 첫 번째로 111이 담긴다. 이후, 111은 이미 있기 때문에 20을 넣는다.