코딩 테스트/프로그래머스 level1

없는 숫자 더하기

fullfish 2021. 10. 7. 23:40

초기 코딩

function solution(numbers) {
    var answer = -1;
    return answer;
}

 

배열을 아직 안배워서 공부했다.

let 배열 = [0,1,2]; <-선언

배열[1] -> 1 <- 호출

 

첫 아이디어

numbers의 배열 크기가 다르므로 크기를 구한다.

numbers배열의 각 인자를 0~9까지의 숫자와 모두 대조해본다 -> for문 사용 -> 대조해보기 위해 0~9가 들어간 배열을 만든다.

없는 수를 더해야 하므로 대조를해서 같을땐 무시하고 다를때 더해주면 될 줄 알았지만 실행하면 300이 넘게나온다.

왜냐하면 존재하지 않는 특정수만 더하고 존재하면 무시해야하는데 numbers[0]===9라면 처음에 9가 존재하지만

1~8까지는 같지않으므로 다 더하고있었다.

 

다음 아이디어

없는 수를 특정하기 어려운데 반해 있는 수는 특정하기 쉬워서

1~9까지의 합인 45에 있는 수를 빼면 없는 수의 합이므로 이렇게 풀었다.

 

나의 코드

function solution(numbers) {
    var answer = -1;
    let onenum=[0,1,2,3,4,5,6,7,8,9];
    let i, j;
    let allsum =45;//생각의 전환으로 없는 수를 빼지않고 모두 더한것에서 있는 수를 뺐다.
    
    for(i=0; i<numbers.length;i++){ //9로 해도 되지만 효울적인 연산을 위해 길이만큼만
        for(j=0;j<10;j++){
            if(numbers[i] === onenum[j]){
               allsum-=j;
           }
        }
    }
    answer = allsum;
    return answer;
}

 

이렇게 제출을 했고 답이 맞았다.

 

그런데 numbers 배열안에 숫자가 중복되는것이 없으므로 굳이 이중for문으로 하나하나 대조해볼 필요없이

그냥 배열안에 있는 수를 다 더하고 45에서 빼면 될것같아서

 

최종 코드

function solution(numbers) {
    var answer = -1;
    answer=0;
    for(let i=0; i<numbers.length;i++){ //9로 해도 되지만 효울적인 연산을 위해 길이만큼만
        answer+=numbers[i];
        }
    return 45-answer;
}

 

로 해봤는데 이것도 됐다.

'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글

x만큼 간격이 있는 n개의 숫자  (0) 2021.10.18
직사각형 별찍기  (0) 2021.10.17
짝수와 홀수  (0) 2021.10.17
폰켓몬  (0) 2021.10.11
시작  (0) 2021.10.07