프로그래머스 연습 문제Lv.1
사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다.
그리워하는 사람의 이름을 담은 문자열 배열 name, 각 사람별 그리움 점수를 담은 정수 배열 yearning, 각 사진에 찍힌 인물의 이름을 담은 이차원 문자열 배열 photo가 매개변수로 주어질 때, 사진들의 추억 점수를 photo에 주어진 순서대로 배열에 담아 return하는 solution 함수를 완성해주세요.
name | yearning | photo | result |
---|---|---|---|
["may", "kein", "kain", "radi"] | [5, 10, 1, 3] | [["may", "kein", "kain", "radi"] ,["may", "kein", "brin", "deny"] , ["kon", "kain", "may", "coni"]] | [19, 15, 6] |
["kali", "mari", "don"] | [11, 1, 55] | [["kali", "mari", "don"] , ["pony", "tom", "teddy"] , ["con", "mona", "don"]] | [67, 0, 55] |
1. name과 yearning을 각각 순서대로 짝을 맞춘다.
2. photo 배열 안에서 각 사람의 name에 따른 yearning을 누적합하고, 이를 새로운 변수에 넣는다.
3. 최종 결과를 return할 리스트 안에 2번의 변수를 append 한다.
def solution(name, yearning, photo):
answer = []
name_yearn = dict(zip(name, yearning))
for i in range(len(photo)):
score = 0
for namee in photo[i]:
score += name_yearn.get(namee, 0)
answer.append(score) # 들여쓰기 주의, 한 칸 뒤로 하면 누적되는 순서로 나옴!!
return answer
name_yearn = dict(zip(name, yearning))
: name과 yearning을 딕셔너리 형태로 묶는다.
접근 방법 2번에 따라 photo 배열 안에서 각 name에 대한 yearning을 계산해야 하기 때문에 접근이 더 편리한 딕셔너리 형태를 사용했다.
for i in range(len(photo)):
score = 0
: photo 배열 안에서 사진 각각의 형태를 구현하기 위해 for 문을 작성했다.
이후에 사진 속 name에 따른 추억 점수를 모으기 위해 score 변수를 생성한다.
for namee in photo[i]:
score += name_yearn.get(namee, 0)
: 사진 하나 photo[i] 에 포함된 사람의 이름을 namee 이라는 임시 변수로 설정해 for 문을 작성했다.
이전에 생성한 딕셔너리 name_yearn 에서 namee과 같은 키값을 찾아 그에 해당하는 추억 점수(yearning)을 가져와, score 변수에 누적합한다.
이때 namee에 해당하는 이름이 딕셔너리에 없으면 0을 반환한다.
answer.append(score)
for namee in photo[i]:
반복문에 이어서 작성하면, 각 사진마다 누적합하는 과정이 모두 answer 변수에 저장되니 주의해야 한다.