✅문제설명
사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["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 함수를 완성해주세요.
✅입출력 예
💡내가 작성한 코드
function solution(name, yearning, photo) {
let match = {}
name.forEach((x,i) =>{
match[x] = yearning[i]
})
return photo.map((k,idx)=>{
let sum = 0;
k.forEach((y,i)=>{
Object.keys(match).includes(y) ? sum = sum+match[y] : sum = sum+0 })
return sum
})
}
match.y로 객체의 키로 접근해서 value값 알아내려고 했는데 undefined가 떠서 match[y]로 수정했더니 정답처리가 되었다.
2가지 상황이 어떻게 다른지 질문을 남겼다!
답변
자바스크립트 객체 접근 방식에는 두 가지가 있다.
- dot notation(점 표기법)
- bracket notation(괄호 표기법)
문법 | 키 | |
점 표기법 | obj.key | key |
괄호 표기법 | obj[foo] | 변수 foo가 가지는 값 |
점 표기법을 활용하여 obj.y와 같이 접근하면 문자열 "y"를 키로 하여 obj에 접근한다.
반면 괄호 표기법을 활용하여 obj[y]와 같이 접근하면 우선 y라는 변수를 참조하여 값을 가져온 뒤, 가져온 값을 키로 하여 obj에 접근한다.
const obj = { y: 'hello', abcde: 'world' };
const y = 'abcde';
console.log(obj.y); // -> 'hello'
console.log(obj[y]); // -> 'world
괄호 표기법의 경우 꼭 변수를 사용한다기 보다는 대괄호 안에 있는 표현식의 평가 결과를 키로 하여 객체에 접근한다고 보는 게 맞을 것 같다. 아래와 같이도 사용 가능하다.
obj['abcde'], obj[x++]
아무래도 match.y를 쓰기에는 y에 대한 직접적인 문자열이 없어 참조가능한 형태인 [y]가 더 상황적으로 맞았나 보다!
💡다른 사람들 풀이
function solution(name, yearning, photo) {
return photo.map((v)=> v.reduce((a, c)=> a += yearning[name.indexOf(c)] ?? 0, 0))
}
yearning[name.indexOf(c)]
객체로 매칭하는 대신에 name의 index값을 가져와서 매칭시켰다.
'?? 0'
?? 연산자는 Nullish Coalescing 연산자로, 특정 값이 null 또는 undefined인 경우에 대체(default) 값을 지정하는 데 사용된다.
💡새로 알게된 지식
?? 표현식
const result = someValue ?? defaultValue;
- someValue: 기본값을 설정하려는 변수 또는 표현식이다.
- defaultValue: someValue가 null 또는 undefined인 경우에 반환할 값이다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
부족한 금액 계산하기 (0) | 2023.11.13 |
---|---|
원소들의 곱과 합 (0) | 2023.11.07 |
주사위 게임 2 - Math.pow() / 거듭 제곱의 표현 (1) | 2023.11.06 |
등차수열의 특정한 항만 더하기 - reduce() (0) | 2023.11.05 |
코드 처리하기 (1) | 2023.11.03 |