문제
https://programmers.co.kr/learn/courses/30/lessons/64065
코딩테스트 연습 - 튜플
"{{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] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]
programmers.co.kr
내 풀이
"{{2},{2,1},{2,1,3},{2,1,3,4}}" 문자열을 [{2}, {2,1}, {2,1,3}, {2,1,3,4}]와 같이 원소의 자료형이 set()인 리스트 lst를 만들었다.
그리고 lst를 길이가 짧은 원소가 앞에 오도록 정렬하였다.
lst를 돌면서 현재 원소와 앞의 원소와의 차집합을 answer에 int형으로 변환하여 넣고, answer를 반환하였다.
def solution(s):
answer = []
s = s[1:-1].split('}')[:-1]
lst = []
for x in s:
if x[0]== ',': lst.append(set(x[2:].split(',')))
else: lst.append(set(x[1:].split(',')))
lst.sort(key=lambda x: len(x))
pre = set()
for l in lst:
answer.append(int(''.join(list(l - pre)))) # 차집합
pre = l.copy()
return answer
과거 내 풀이
지저분하다. 너무 길다. 현재 내 풀이랑 set을 사용한다는 점은 동일한 것 같다.
def solution(s):
answer = []
s = s[1:len(s)-1]
indices = []
for i in range(len(s)):
if s[i] == ',' and s[i-1] == '}' and s[i+1] == '{':
indices.append(i)
if len(indices) == 0:
answer.append(s)
elif len(indices) == 1:
answer.append(s[:indices[0]])
answer.append(s[indices[0]+1:])
else:
answer.append(s[:indices[0]])
for i in range(len(indices)-1):
answer.append(s[indices[i]+1:indices[i+1]])
answer.append(s[indices[-1]+1:])
res = []
for ans in answer:
tmp = ans[1:len(ans)-1].split(',')
res.append(set(tmp))
res.sort(key = lambda x:len(x))
final = set()
total = []
for r in res:
diff = r.difference(final)
final.update(diff)
total.append(list(diff))
total = sum(total, [])
total = list(map(int, total))
return total
총평
알고리즘 푸는 습관이 좀 더 좋은 방향으로 바꼈나?
'알고리즘 > 카카오 EASY' 카테고리의 다른 글
후보키 (Level 2) (0) | 2022.07.07 |
---|---|
순위 검색 (Level 2) (0) | 2022.07.05 |
수식 최대화 (Level 2) (0) | 2022.07.04 |
거리두기 확인하기 (Level 2) (0) | 2022.06.30 |
뉴스 클러스터링 (Level 2) (0) | 2022.06.28 |