[프로그래머스] 추억 점수

kiki·2024년 1월 12일
0

프로그래머스

목록 보기
59/76

문제 링크

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

문제 설명

  • 그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어진다.
  • 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return

1차 시도 - 통과

def solution(name, yearning, photo):
    dict = {}
    result = []
    for i,j in zip(name, yearning):
        dict[i]=j
    for pic in photo:
        sum = 0
        for p in pic:
            try:
                sum+=dictionary[p]
            except:
                pass
        result.append(sum)
    return result

name과 yearning을 연결해 dictionary를 만들고 그를 이용해 for문을 돌며 추억 점수를 구해 result list에 append 해줬다.
굳이 try except문 안쓰고 if p in name으로 확인했어도 된다.

그리고 여기서 dict를 다르게 구성하는 방법이 있다.

dictionary = dict(zip(name, yearning))

zip, 그리고 dictionary 함수를 이용하면 한줄로 dictionary를 구성할 수 있다.

아 그리고 1차 시도 코드에서 딕셔너리 변수명을 dict라고 해줬는데 코드가 실행되긴 했으나 dict 함수가 있으니 저렇게 사용하지 말자.

2차 시도 - 다른 사람 풀이

def solution(name, yearning, photo):
    return [sum(yearning[name.index(i)] for i in pic if i in name) for pic in photo]

index를 제대로 사용한 코드다.
하지만 index 함수를 사용하기 때문에 O(N) (맞나??)의 시간 복잡도를 가짐
참고로 dictionary의 빅오는 O(1)이라고 한다.

정리

  • dictionary: 두 리스트를 dictionary로 엮고싶을 땐 zip과 dict함수를 이용하면 된다.
  • 파이썬 문제를 푸는 데는 리스트, 딕셔너리 등 함수를 잘 알고 적재적소에 잘 쓰는게 가장 중요하다고 생각된다..

0개의 댓글