본문 바로가기
JS/코딩테스트

[프로그래머스_추억점수] 괄호의 중요성 & 복합대입연산자

by 율✌️ 2023. 4. 4.

👉문제링크

 

나의 풀이

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%맞지는 않더라...)