https://school.programmers.co.kr/learn/courses/30/lessons/77884
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
입출력 예 #1
수 | 약수 | 약수의 개수 |
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 |
먼저 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에서는 실행이 이상하게 되었다.
왜 이렇게 되었을까? 분석해보니 아무래도 숫자를 문자로 인식해서 문자로 합쳐지다보니 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로 실행해 볼 거 같다. 이중으로 해주는 게 최고일 듯