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);
|
풀이 (본인 개선 코드)
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; } }
|
배운점
- 코드에 불필요한 count를 제거하니 속도가 증가하였다.
- count 대신 boolean type를 사용하니 속도가 증가하였다.
- 무한loop를 사용하여 원하는 연산 결과가 끝나면 나오도록 코드를 작성하는 것이 효율적이였다.(변수를 적게 사용)
- 큰 수부터 나누도록 하여 나누어떨어지지 않는 수를 제거하니 속도가 개선되었다.