import re
def solution(s):
arr = []
arr2 = []
answer = []
# 맨 앞이랑 맨 뒤 {} 제거
s = s[1:-1]
# }, 로 나눠서 각 집합 기호를 하나씩 나눈다.
# { } 를 제거하여 2 2,1 2,1,3 형식의 문자열을 arr에 넣음.
for element in s.split('},'):
nums = re.sub('{', '', element)
nums = re.sub('}', '', nums)
arr.append(nums)
# 문자열 길이대로 정렬.
# 긴 것에서 순서가 바뀌어도 되는 것을 고려해야하기 때문.
arr = sorted(arr, key=lambda x:len(x))
# ,로 split 해서 숫자로 바꾸고 arr2에 넣음.
# 각 집합 원소가 한 행에 들어가는 2차원 배열이 됨.
for x in arr:
arr2.append(list(map(int, x.split(','))))
# 해당 배열을 돌면서
# 작은 것부터 배열에 넣는다.
# 이미 있는 것은 넣지 않아도 됨.
for i in range(len(arr2)):
for y in arr2[i]:
if not (y in answer):
answer.append(y)
return answer
여기서 더 줄일 수 있는 방법이 있을까 했는데,
처음에 {}
를 한겹 벗긴 후, split을 },
기준으로 했는데,
{}
를 두겹 벗긴 후 },{
기준으로 하면 정규표현식을 사용할 필요가 없다!!
sorted 대신 arr.sort(key = len)
을 사용할 수 있다는 점도 알아둬야한다.
Counter 모듈을 사용해서 가장 많이 등장한 것부터 넣는 2줄짜리 아주 아름다운 풀이도 있었는데 그걸 처음부터 사용하려면.. 두달은 더 연습해야할 것 같다.
import re
def solution(s):
new = []
answer = []
s = s[2:-2]
s = s.split('},{')
for element in s:
new.append(element.split(','))
new = sorted(new, key=lambda x: len(x))
for arr in new:
for num in arr:
if not (num in answer):
answer.append(num)
answer = [int(num) for num in answer]
return answer
다른건 모르겟고 },{ 으로 쪼개는게 상당히 기억에 남았어서 풀어냈다. 역시 sorted 가 기억 안났음.. sorted(배열, key=클로저) 외우자...