나의 풀이
function solution(name, yearning, photo) {
let score = {};
let answer = [];
name.forEach((el, idx) => {
score[el] = yearning[idx];
});
photo.forEach(el => {
let total = 0;
el.forEach(name => {
Object.keys(score).includes(name) && (total += score[name]);
});
answer.push(total);
});
return answer
}
chatGPT선생님 짱 ^^
여담이지만, 너무 기술이 빠르게 발전한다고 무서워하고 욕하기보다는 맘놓고 최대한 이용하는게 짱이라고 생각한다..
오늘 괜히 이상한걸로 열올려서 여기라도 풀어야지 휴..
무튼 !! 오늘도 GPT 에게 열심히
⭐️ 배운내용 정리 ⭐️
1. 괄호의 중요성
👉 일단, 복합대입연산자 (+=, -=, *=, /= 등)는 우선순위가 아주 낮다.
때문에, 먼저 수행되어야하는 경우에는 무조건 해당코드에 괄호를 사용해 우선순위를 높여주어야 한다.
나의풀이에서,
❌ 이렇게하면 오류가나고 ❌
Object.keys(score).includes(name) && total+=(score[name]);
// 아래와 같은 오류가 난다
SyntaxError: Invalid left-hand side in assignment expression.
나는 복합연산자의 우선순위가 낮은지 모르고 썼는데 계속 오류가 났다.
💡 위의 경우, 괄호가 없기 때문에
1. Object.keys(score).includes(name) && total 가 실행
2. 그 후 +=(score[name]) 를 읽는다
하지만 이미 1번이 먼저 실행되었기 때문에 2번을 수행할 수 없게 된것이다.
1번은 true/false값을 반환하게 되고 boolean에 연산을 할 수 없는 것.
⭕️ 이렇게해야 오류가 나지 않는다. ⭕️
Object.keys(score).includes(name) && (total+=score[name]);
위의 경우, 괄호를 사용해줌으로써 복합연산자의 우선순위가 높아져 의도했던 바와 같이 코드를 실행시킬 수 있다.
2. '+=' 와 '=+'
👉 '+=' 는 복합할당연산자 이고, '=+'는 할당연산자와 단항연산자의 조합이다.
아래를 예를들어보면,
let x = 10
x=+5 // 1번
x+=5 // 2번
✅ 1번 x=+5
먼저, '+' 연산자가 단항 연산자로 사용되어 5를 양수로 바꾼다.
그다음 '=' 연산자가 x에 양수가된 5를 할당한다.
따라서, x의 값은 5.
그냥 x=+5 는 x=5와 같은소리!!
그리고 이런건 잘 안쓴다고한다..ㅎㅎ
✅ 2번 x+=5
먼저, x와 5를 더한다
그다음 더한결과를 다시 x에 할당한다.
따라서, x의 값은 15.
x+=5 는 x=x+5와 같은소리!!
나의풀이에서도
❌ 이렇게하면 계속 새로운 값이 대입되어 원하는 값이 안나오고 ❌
Object.keys(score).includes(name) && (total=+score[name]);
⭕️ 이렇게해야 원했던대로 total에 새로운 값이 더해져 원하는 값이 나온다. ⭕️
Object.keys(score).includes(name) && (total+=score[name]);
생각지도 못한곳에서 자꾸 오류를 내는걸 보며
오늘도 나의 기초지식을 더 잘 쌓아야겠다는 다짐과 함께
정리 끝!!!!
ChatGPT 짱 ㅋㅋ(근데 100%맞지는 않더라...)