문제설명
여러 장의 사진들이 존재한다. 사진의 주인인 루는 사진별로 추억 점수를 매길려고 한다. 사진 속에 나오는 인물들의 그리움 점수를 모두 합산해서 사진의 추억 점수를 매긴다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]이면 해당 사긴의 추억 점수는 16(5+10+1)이 되는 방식이다. 이런 식으로 모든 사진의 추억 점수를 매겨 반환해주면 되는 문제이다.
더보기
※제한사항
- 3 <= (name의 길이 = yearning의 길이) <= 100
- 3 <= name의 원소의 길이 <= 7
- name은 알파벳 소문자로만 이루어져 있다.
- name에는 중복된 값이 없다.
- 3 <= photo의 길이 <= 100
- 1 <= photo[i]의 길이 <= 100
- 3 <= photo[i]의 원소(문자열)의 길이 <= 7
- photo[i]의 원소들은 알파벳 소문자로만 이루어져 있다.
- photo[i]의 원소들은 중복된 값이 없다.
풀이
제공된 변수는 name, yearning, photo로 각각 이름과 그리움 점수, 사진 속 인물이 저장되어 있다.
먼저 name과 yearning을 score라는 객체에 이름 별로 매칭시켜 저장 시켜주는 작업을 하였다. 그 다음 photo의 인덱스를 돌면서 score[photoName]에 일치하는 값이 있다면 점수를 누적해 사진에 대한 추억 점수를 매겨주는 방식으로 코드를 작성하였다.
풀이에 사용한 코드이다.
function solution(name, yearning, photo) {
let answer = []; // 정답을 반환할 변수
let score = {}; // 이름 별 추억 점수를 저장할 변수
let sumScore = 0; // 사진 별 누적 추억 점수를 저장할 임시 변수
// 이름 별로 그리움 점수를 매칭하여 저장하는 부분
name.map((nameData, nameIndex) => {
score[nameData] = yearning[nameIndex]
})
// 사진 별 추억 점수를 계산하여 answer에 저장하는 부분
photo.map((photoData, photoIndex) => {
sumScore = 0 // 사진 별로 값을 구하기 때문에 새로운 사진일때마다 초기화
// 사진 속 인물이 score에 있는 인물인지 확인하고 그에 대한 점수를 매긴다
photoData.map((photoName) => {
score[photoName] != undefined ? sumScore+=score[photoName] : ''
})
answer.push(sumScore)
})
return answer;
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.01 연습문제 성격 유형 검사하기 (JavaScript) (0) | 2024.05.03 |
---|---|
[프로그래머스] Lv.01 연습문제 덧칠하기 (JavaScript) (0) | 2024.05.02 |
[프로그래머스] Lv.02 연습문제 예상 대진표 (JavaScript) (0) | 2024.04.23 |
[프로그래머스] Lv.02 연습문제 오픈채팅방 (JavaScript) (0) | 2024.04.20 |
[프로그래머스] Lv.02 연습문제 영어 끝말잇기 (JavaScript) (0) | 2024.04.18 |