문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/176963
소스 코드
def solution(name, yearning, photo):
result = []
score_dict = {}
for a,b in zip(name,yearning): # 이름:스코어 딕셔너리
score_dict[a] = b
for case in photo:
tmp = 0 # 케이스별로 점수 초기화
for idx in range(len(case)):
if case[idx] not in score_dict: # 이름 없으면 패스
continue
else: # 이름 있으면 점수 상승
tmp += score_dict[case[idx]]
result.append(tmp)
return result
해설
- 구현, 해시
특별한 해설이 필요 없는 수준의 구현 문제였습니다.
이 문제에서는 name, yearning, photo 리스트의 길이가 최대 100이고 각 원소의 길이도 최대 7이므로 시간복잡도는 크게 고려하지 않아도 될 것으로 보입니다.
즉, 위처럼 딕셔너리가 아닌 리스트를 사용해도 큰 문제는 없다는 뜻입니다.
그러나 시간복잡도 때문이 아니더라도 각 인물에 대한 점수를 확인하기 위해서는 딕셔너리 자료구조가 훨씬 편합니다.
그래서 순서를 간단히 요약하면 다음과 같습니다.
1. { 이름 : 점수 } 형태의 딕셔너리를 생성합니다.
2. photo에 담긴 각 케이스를 탐색합니다.
3. 케이스 내의 각 원소를 탐색합니다.
4. 각 원소, 즉 사람의 이름이 위에 생성한 딕셔너리에 포함되는 경우(key인 경우)에만 점수를 더해줍니다.
5. 이름이 포함되지 않으면 다음 이름으로 넘어갑니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 덧칠하기 (Python) (0) | 2023.05.13 |
---|---|
[프로그래머스] 공원 산책 (Python) (0) | 2023.05.12 |
[프로그래머스] 달리기 경주 (Python) (0) | 2023.05.10 |
[프로그래머스] 배달 (Python) (0) | 2023.03.09 |
[프로그래머스] 바탕화면 정리 (Python) (0) | 2023.03.05 |