WHAT I LEARNED/Algorithm

[프로그래머스 / 자바스크립트] 없는 숫자 더하기

보니bonnie 2022. 1. 24. 15:48
728x90

내 담당 문제가 아니지만,

아무리 생각해도 감을 못잡겠어서 최단 시간 구글링하고 정리하는 문제 🤯

슥 봤을 때는 이렇게까지 이해가 안될 줄은 몰랐는데.. !

for문, if문이 사용되는 건 알겠는데 곱씹을수록 알쏭달쏭하다.

입출력을 보는데 느낌이 쎄해졌다.

지금까지는 입출력을 보면 어떻게 해야할 지 대충 구성이 잡히는데 요건 영 생각이 나지 않는다.

저녁먹느라 한 템포 쉬고 와서 그런가 ?

 

 

💡나의 코드💡랄 것도 없다.

for문만 만 적어두고 멍...

  • 문제 그대로, 없는 값을 찾아서 그 값들의 합을 구한다.
  • 0~9인 numbers의 총합인 45에서 있는 값들의 합을 뺀다.

요런 느낌으로 해보고 싶었는데

그래서.. 없는 값을 어떻게 구한다고....? 🙄

 

.

.

.

 

1시간동안 노트에 끙끙대다가 결국 구글링의 도움을..! 

function solution(num) {
    let answer = 0;

    for(let i=0; i<10; i++){
        if(!num.includes(i)) answer += i;
    }
    return answer;
}

이렇게 심플한데! 코드가 심플하면 심플할수록 아쉬움이 더 커진다.

조금만 더 생각했으면 됐을 수도 있는데!

 

💪🏻 부족한 점(밖에 없지만...) 굳이 정리해보자면

  • include 함수의 존재를 찾지 못했다. 포함한다는 걸 표현하려고 찾아보았는데, 아무래도 검색어 미스인듯.
    저것만 찾았어도 조금 더 팔 수 있었을텐데!
  • 그래,, 문제에서 9까지밖에 없다했는데 나는 왜 굳이 num.length를 고집했던 것일까.. 주입식 공부의 단점일까ㅎ..
    범위를 정해주는 문제에서 잘 적용해야겠다.

 

그런데 'if(' 와 'num' 사이의 웬 느낌표인고하니,

자바스크립트의 논리연산자 중 NOT연산자인 (느낌표)는 입력값을  boolean으로 변환하여
값이 true이면 false로 , false이면 true로 값을 리턴합니다.

출처: https://ifuwanna.tistory.com/278 [IfUwanna IT]

그렇단다. not을 의미하는 연산자 느낌표.. 구글링하다가 또 하나 지식을 쌓았다.

 

 

생각했던 두 번째 방법은 바로 0~9까지의 총합인 45에서 있는 값들을 빼는 것.

function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

 

사실 이게 더 복잡할 거라고 생각했는데, 코드를 보니 이게 더 심플하다? 이럴 수가 있나?

그치만 체크해야하는 함수들이 많다.. 호ㅏ이팅..

728x90