def solution(s):
answer = []
n = len(s)
for i in range(1, n+1):
for k in s:
if len(k) == i: # 길이가 같은 튜플
for j in k: # 그 튜플의 원소 중
if j not in answer: # answer에 없으면 append
answer.append(j)
return answer
답 "{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4]
# [{2},{2,1},{2,1,3},{2,1,3,4}] 로 처리하니까 정답 잘 나옴
[2, 1, 3, 4]
[2, 1, 3, 4]
[111, 20]
[123]
[3, 2, 4, 1]
프로그래머스 채점
TypeError: unhashable type: 'set'
에러 뜸"타입에러: 해시할 수 없는 타입: set"
set이나 딕셔너리의 키의 원소는 해시할 수 있는 "변형이 불가능한" (immutable) 값이어야 한다.
리스트와 튜플의 차이는 리스트는 리스트에 원소를 더하거나 빼거나 할 수 있는 변형이 가능한 타입이다.
튜플은, 반면, 한번 정의되면 변형이 불가능한 타입이다.
def solution(s):
answer = []
s = s[:-2].replace('{', '').replace(',', ' ').split('}')
for i, v in enumerate(s):
s[i] = v.split()
n = len(s)
for i in range(1, n+1):
for k in s:
if len(k) == i:
for j in k:
if j not in answer:
answer.append(j)
answer = [int(i) for i in answer]
return answer
리팩토링 과정
def solution(s):
answer = []
s = s[:-2].replace('{', '').replace(',', ' ').split('}')
# {{2},{2,1},{2,1,3},{2,1,3,4}} ->
# {{2},{2,1},{2,1,3},{2,1,3,4
# 2} 2 1} 2 1 3} 2 1 3 4
# ['2', ' 2 1', ' 2 1 3', ' 2 1 3 4']
for i, v in enumerate(s):
s[i] = v.split()
# s = [i.split() for i in s] 한 줄로 치환 가능
n = len(s)
for i in range(1, n+1):
for k in s:
if len(k) == i:
for j in k:
if j not in answer:
answer.append(j)
answer = [int(i) for i in answer]
return answer
i) n = len(s) 로 받아서 길이가 i와 같은 것에서 원소를 구하려고 했으나
길이 순으로 정렬 후 사용하면 중복 for문을 줄일 수 있음
s.sort(key=len) # s.sort(key=lambda x:len(x)) 차이점 공부하기!
for i in s:
for j in i:
if j not in answer:
answer.append(j)
ii) 바로 int(j) 처리하기
최종 풀이
def solution(s):
answer = []
s = s[:-2].replace('{', '').replace(',', ' ').split('}')
s = [i.split() for i in s]
s.sort(key=len)
for i in s:
for j in i:
if int(j) not in answer:
answer.append(int(j))
return answer
print(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))