[프로그래머스] Lv.1 약수의 개수와 덧셈

ZZEON·2024년 1월 16일
0

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/77884

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • 1 <= left <= right <= 1,000

입출력 예

left right result
13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
약수 약수의 개수
13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서,13 + 14 + 15 - 16 + 17 = 43 을 return 해야 합니다.

문제 풀이

먼저 left 부터 시작하여 right로 끝날 때까지 각각의 수의 약수를 구했다.

function solution(left, right){
    var answer = 0;
  //숫자 하나씩 반복
    for(let i=left; i<=right; i++){
      //약수가 짝수인지 홀수인지 판별
       let count = 0;
      //약수 구하기
       for(let j=0; j<=i;j++){
            if(i%j===0)
                count++;
       }
      //짝수이면 더해주고 홀수이면 빼주기
       if(count % 2 === 0)
        answer += i;
       else
        answer -= i;
    }
    return answer;
}

해당 코드를 실행했을 때, 프로그래머스에서는 문제없이 실행이 되었지만 VSCode에서는 실행이 이상하게 되었다.

VSCode

왜 이렇게 되었을까? 분석해보니 아무래도 숫자를 문자로 인식해서 문자로 합쳐지다보니 count가 짝수인 것만 나온 것 같다.

문자를 정수로 바꾸는 방법

Javascript에서 문자를 정수로 바꾸는 방법은 2가지가 대표적이다.
1. Number()
2. parseInt()

나는 둘 중 Number를 사용하여 풀어봤다.

const readline= require("readline");

const rl = readline.createInterface({
    input : process.stdin,
    output : process.stdout,
});

let input = []
rl.on("line", (line) => {
    input = line.split(' ');
    rl.close();
})

rl.on('close', ()=> {

    solution(input[0],input[1])
    process.exit();
})

function solution(left, right){
    var answer = 0;
    for(let i=left; i<=right; i++){
       let count = 0;
       for(let j=1; j<=i;j++){
            if(i%j===0)
                count++;
       }
    console.log(count)
       if(count % 2 === 0)
         //수정한 부분
        answer += Number(i);
       else
        //수정한 부분
        answer -= Number(i);
    }
    console.log(answer);
    return answer;
}

수정하니 결괏값을 잘 받을 수 있었다.

VSCode 실행 수정 후

프로그래머스로 항상 실행해오던 걸 VSCode로 처음 실행해봤는데, 이러한 오류(?)를 발현하게 되었다.
앞으로도 VSCode로 실행해 볼 거 같다. 이중으로 해주는 게 최고일 듯

profile
프론트엔드 개발과 디자인을 좋아합니다

0개의 댓글