[프로그래머스] 추억점수 딕셔너리 불가능한 키 값 #python

2023. 6. 27. 16:45_Study/Baekjoon

728x90
 
  프로그래머스
문제풀이
python
      No. 추억 점수

 

 

#파이썬 #프로그래머스 #문제풀이 #추억 점수

https://school.programmers.co.kr/learn/courses/30/lessons/176963

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이번 글에서는 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

 

How to overcome TypeError: unhashable type: 'list'

I'm trying to take a file that looks like this: AAA x 111 AAB x 111 AAA x 112 AAC x 123 ... And use a dictionary to so that the output looks like this {AAA: ['111', '112'], AAB: ['111'], AAC: [123...

stackoverflow.com

 

알고보니 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