Problem 5

1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수

문제

1 ~ 10 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 2520입니다.
그러면 1 ~ 20 사이의 어떤 수로도 나누어 떨어지는 가장 작은 수는 얼마입니까?

풀이 (본인)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var maxNum = Number.MAX_VALUE;
var minNum = 0;
for(var num = 1; num<maxNum; num++){
var count = 0;
for(var innerNum = 1; innerNum <= 20; innerNum++){
if(num%innerNum === 0){
count++;
}
}
if(count === 20){
minNum = num;
break;
}
}
console.log(minNum); //232792560

풀이 (본인 개선 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var num = 0;
while(true){
num++
var divided = true;
for(var innerNum = 20; innerNum > 0; innerNum--){
if(num%innerNum !== 0){
divided = false;
break;
}
}
if(divided){
console.log(num)
break;
}
}
// 결과 232792560

배운점

  • 코드에 불필요한 count를 제거하니 속도가 증가하였다.
  • count 대신 boolean type를 사용하니 속도가 증가하였다.
  • 무한loop를 사용하여 원하는 연산 결과가 끝나면 나오도록 코드를 작성하는 것이 효율적이였다.(변수를 적게 사용)
  • 큰 수부터 나누도록 하여 나누어떨어지지 않는 수를 제거하니 속도가 개선되었다.
공유하기