셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.
튜플은 다음과 같은 성질을 가지고 있습니다.
원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)이 주어질 때(단, a1, a2, ..., an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표현할 수 있습니다.
예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는
와 같이 표현할 수 있습니다. 이때, 집합은 원소의 순서가 바뀌어도 상관없으므로
는 모두 같은 튜플 (2, 1, 3, 4)를 나타냅니다.
특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해주세요.
s result
"{{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]
"{{20,111},{111}}" [111, 20]
"{{123}}" [123]
"{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]
입출력 예에 대한 설명
입출력 예 #1
문제 예시와 같습니다.
입출력 예 #2
문제 예시와 같습니다.
입출력 예 #3
(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.
입출력 예 #4
(123)을 집합 기호를 이용해 표현하면 {{123}} 입니다.
입출력 예 #5
(3, 2, 4, 1)을 집합 기호를 이용해 표현하면 {{3},{3,2},{3,2,4},{3,2,4,1}}이 되며, 이는 {{4,2,3},{3},{2,3,4,1},{2,3}}과 같습니다.
이번 문제는 괄호 안에 있는 지를 구분하고, 숫자가 나오면 임시 숫자 문자열에 추가해주고, 쉼표가 나오면 임시 숫자 문자열에 있던 숫자를 임시 리스트에 넣어주고, 괄호가 끝나면 임시 리스트를 결과 리스트에 넣어주었고, 이 과정 이후에 완성된 결과 리스트를 길이의 오름차순으로 정렬하고 순회하면서 정답 리스트에 해당 숫자가 존재하지 않으면 추가해주는 방식으로 접근하였다.
결과 리스트를 만드는 과정에서 닫는 괄호 이전에 있는 숫자가 추가되지 않는 문제가 있어서 만약 닫는 괄호가 나왔을 경우에 임시 숫자 문자열이 공백이 아닐 경우 임시 리스트에 이 숫자를 추가한 뒤에 임시 리스트를 결과 리스트에 담는 방식을 사용하여 모든 집합을 만들 수 있었다.
문자열 처리를 요구하는 문제로, 생각한 것 보다는 잘 풀려서 기분이 좋았다.
s[1:-1]
을 순회하는 chr에 대한 for문을 돌린다.results[i]
를 순회하는 j에 대한 for문을 돌린다.def solution(s):
answer = []
results=[]
tmp=[]
num=''
stack=[]
for chr in s[1:-1]:
if chr=='{':
stack.append(chr)
if chr=='}':
stack.pop()
if num!='':
tmp.append(num)
num=''
results.append(tmp)
tmp=[]
if stack:
if chr.isdigit():
num+=chr
if chr==',':
tmp.append(num)
num=''
results.sort(key=lambda x: len(x))
for i in range(len(results)):
for j in results[i]:
if int(j) not in answer:
answer.append(int(j))
return answer