[프로그래머스] 추억점수 딕셔너리 불가능한 키 값 #python
2023. 6. 27. 16:45ㆍ_Study/Baekjoon
728x90
프로그래머스 문제풀이 |
python | ||
No. 추억 점수 |
#파이썬 #프로그래머스 #문제풀이 #추억 점수
https://school.programmers.co.kr/learn/courses/30/lessons/176963
이번 글에서는 list to dict 리스트를 딕셔너리로 변환하는데 중점을 둔다.
// 알고리즘
가장 중요한 목적이 무엇인지?
리스트를 적절하게 딕셔너리로 변환하는 과정이다. 딕셔너리 키값으로 가능한 것은 변환 불가능한 타입이다.
정수(integers), 부동소수점(floats), 문자열(strings), 그리고 튜플(tuples)은 딕셔너리의 키(key)로 사용될 수 있다.
즉, 변경 가능한(mutable) 타입인 리스트(list), 집합(set), 딕셔너리(dict)은 불가능하다.
왜 이런 방법을 선택했는지?
두 리스트를 두 번 불러오는 건 비효율적이라고 생각해서 딕셔너리로 묶어서 구현했다.
// 구현하기
-> How?
어떻게 구현?
->Why?
왜 이런 방법을?
// 수정하기
def solution(name, yearning, photo):
dic = dict(zip(name,yearning))
for i in range(len(photo)):
sum = 0
for j in range(len(photo[i])):
sum += dic.get(photo[j])
answer = []
return dic
TypeError: unhashtable types: 'list'가 발생해서 알아봤다
딕셔너리의 키의 원소는 변형 불가능한타입이어야해서 (리스트는 변경 가능한 타입이기 때문에) 리스트를 튜플로 변환하면 키로 사용이 가능하다고 한다.
name의 배열 같은 경우 문자열인데 왜 안되는걸까?
https://stackoverflow.com/questions/13675296/how-to-overcome-typeerror-unhashable-type-list
알고보니 photo[i][j]로 해야하는데 발생하는 문제였다.
그리고 이름이 없는 경우 None이 반환되는데 이는 더할수가 없으므로 if문으로 조건처리했다.
// 완성코드
def solution(name, yearning, photo):
dic = dict(zip(name, yearning))
answer = []
for i in range(len(photo)):
sum = 0
score = 0
for j in range(len(photo[i])):
score = dic.get(photo[i][j])
if score is not None:
sum += score
answer.append(sum)
return answer
'_Study > Baekjoon' 카테고리의 다른 글
[PGS] 프로그래머스 기사단원의 무기, 약수계산 최적화 #99클럽7일차 #TIL (0) | 2024.04.06 |
---|---|
python 3.9 이하 버전을 위한 최대공약수(gcd), 최대공배수(lcm) (0) | 2024.03.20 |
[프로그래머스] 달리기 경주 Lv.1 8,9,10,11,12,13 시간 초과 해결 #python (0) | 2023.06.27 |
[11003] 최솟값 찾기 #파이썬 (0) | 2023.05.01 |
[BOJ:1253] 좋다 #파이썬 #백준 (0) | 2023.05.01 |