



문제 글만 읽고서는 문제를 이해하기가 다소 난해했다.
한마디로 's'를 입력받고,
ex) "{{4,2,3},{3},{2,3,4,1},{2,3}}"
여기에 원소 4개가 반복적으로 쓰이는데 이 순서를 파악해서 [3,2,4,1] 리스트 형식으로 반환해야 한다.
순서는
"{{4,2,3},{3},{2,3,4,1},{2,3}}" 에서 원소개수가 제일 작은 집합부터 봤을 때
따라서 결과는 [3,2,4,1] 이 된다.
문자열을 잘 조작하여 필요한 값들만 다뤄서 내가 원하는 자료구조에 넣고,
원소 개수 순으로 정렬시킨 후 차례로 등장하는 원소들을 answer 배열에 넣어주었다.
s = "{{4,2,3},{3},{2,3,4,1},{2,3}}"
def solution(s):
# 껍데기 벗기기
s = s[1:-1] # {4,2,3},{3},{2,3,4,1},{2,3}
arr = []
temp = []
is_in = False
num = "" # 숫자 누적용
for c in s:
if c == "{":
is_in = True
temp = [] # temp 비우기
num = "" # num 비우기
elif c == "}":
if num != "":
temp.append(int(num))
num = ""
arr.append((temp)) # 괄호 닫기 전 temp 값들 튜플로 감싸서 arr에 넣기
is_in = False
elif is_in:
if c.isdigit():
num += c # num에 숫자 누적
elif c ==",":
if num !="":
temp.append(int(num))
num =""
# arr = [[4,2,3],[3],[2,3,4,1],[2,3]]
arr = sorted(arr, key=len)
answer = []
# answer에 값들을 넣을건데 없는 것만 넣기
for nums in arr:
for n in nums:
if n not in answer:
answer.append(n)
return answer
위 코드는 if n not in answer: 처럼 리스트에서 포함 여부를 확인하는 방식이라,
원소가 많아지면 매번 선형 탐색이 들어가서 효율이 떨어질 수 있다.
seen이라는 set을 같이 써서 “이미 넣은 값인지”를 빠르게 체크하면 더 정석이다.
answer = []
seen = set()
for nums in arr:
for n in nums:
if n not in seen:
answer.append(n)
seen.add(n)
return answer
# s = "{{2},{2,1},{2,1,3},{2,1,3,4}}"
def solution(s):
# {} 떼고 [(2),(2,1),(2,1,3),(2,1,3,4)] 만들기
s = s[2:-2] # 2},{2,1},{2,1,3},{2,1,3,4
s = s.split("},{") # ["2","2,1","2,1,3","2,1,3,4"]
arr = []
for c in s:
arr.append(list(map(int,c.split(","))))
# arr = [[2],[2,1],[2,1,3],[2,1,3,4]]
# len 에 대한 정렬
arr = sorted(arr,key=len)
result = []
seen = set()
for nums in arr:
for num in nums:
if num not in seen:
result.append(num)
seen.add(num)
return result