문제
https://school.programmers.co.kr/learn/courses/30/lessons/176963
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
그리워하는 사람의 이름과 사람별 그리움 점수가 주어질 때, 각 사진을 기반으로 추억 점수를 계산하는 문제다.
제한사항
- 3 ≤ name의 길이 = yearning의 길이≤ 100
- 3 ≤ name의 원소의 길이 ≤ 7
- name의 원소들은 알파벳 소문자로만 이루어져 있습니다.
- name에는 중복된 값이 들어가지 않습니다.
- 1 ≤ yearning[i] ≤ 100
- yearning[i]는 i번째 사람의 그리움 점수입니다.
- 3 ≤ photo의 길이 ≤ 100
- 1 ≤ photo[i]의 길이 ≤ 100
- 3 ≤ photo[i]의 원소(문자열)의 길이 ≤ 7
- photo[i]의 원소들은 알파벳 소문자로만 이루어져 있습니다.
- photo[i]의 원소들은 중복된 값이 들어가지 않습니다.
예시
Example 1:
name: ["may", "kein", "kain", "radi"]
yearning: [5, 10, 1, 3]
photo: [["may", "kein", "kain", "radi"],["may", "kein", "brin", "deny"], ["kon", "kain", "may", "coni"]]
result: [19, 15, 6]
Example 2:
name: ["kali", "mari", "don"]
yearning: [11, 1, 55]
photo: [["kali", "mari", "don"], ["pony", "tom", "teddy"], ["con", "mona", "don"]]
result: [67, 0, 55]
Example 3:
name: ["may", "kein", "kain", "radi"]
yearning: [5, 10, 1, 3]
photo: [["may"],["kein", "deny", "may"], ["kon", "coni"]]
result: [5, 15, 0]
풀이
def solution(name, yearning, photo):
answer = []
for i in photo:
score = 0
for j in i:
if j in name:
score += yearning[name.index(j)]
answer.append(score)
return answer
- 각 사진을 순차적으로 탐색한다.
- 각 사진의 추억 점수를 계산하기 위해 score 변수를 초기화한다.
- 사진 속 친구들을 탐색한다.
- 사진에 있는 친구가 추억 점수가 있는 친구라면 해당하는 추억 점수를 더한다.
- index() 사용
- 사진에 있는 친구가 추억 점수가 있는 친구라면 해당하는 추억 점수를 더한다.
- 사진 한 장에 대한 추억 점수를 정답 리스트에 추가한다.
- 모든 사진에 대한 추억 점수를 반환한다.
다른 사람의 풀이
위의 방법은 name.index(j)로 인덱스를 찾는 부분은 시간 복잡도가 O(n)이라, name 배열이 커질수록 성능 저하가 있을 수 있다. 이를 개선하기 위해 name과 yearning을 딕셔너리 형태로 매핑하면 탐색 시간을 O(1)로 줄일 수 있다.
def solution(name, yearning, photo):
answer = []
dictionary = dict(zip(name, yearning))
for i in photo:
score = 0
for j in i:
if j in dictionary:
score += dictionary[j]
answer.append(score)
return answer
'알고리즘' 카테고리의 다른 글
[프로그래머스] 옹알이(1) - 파이썬/python (0) | 2024.10.31 |
---|---|
[백준(BOJ)] 14888번 연산자 끼워넣기 - 파이썬/python (0) | 2024.10.25 |
[프로그래머스] 다트 게임 - 파이썬/python (0) | 2024.10.16 |
[백준(BOJ)] 18310번 안테나 - 파이썬/python (0) | 2024.10.08 |
[프로그래머스] 숫자 문자열과 영단어 - 파이썬/python (0) | 2024.09.30 |