📝 문제
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
- 제한사항
n은 10,000 이하의 자연수 입니다.
🔑 풀이
1차 풀이
function solution(n) {
let answer = 0;
for(let i = 1; i <= n; i++) {
let sum = i;
let j = i + 1;
while (sum < n) {
sum += j;
j++;
}
if(sum === n) answer++;
}
return answer;
}
정확도 테스트를 통과했으나, 효율성 테스트에서 3개를 통과하지 못했다.
더 나은 효율성을 위해 while문을 for문으로 바꾸고, 변수 선언을 포함해줬다.
2차 풀이
function solution(n) {
let answer = 0;
for(let i = 1; i <= n; i++) {
let sum = i;
for(let j = i+1; sum < n; j++) {
sum += j;
}
if(sum === n) answer++;
}
return answer;
}
훨씬 간결한 풀이가 완성되었다.
Lv 2 부터는 동작한다고 무조건 통과가 아니라, 간결하게 줄여서 효율성도 신경써야한다.
아무 생각없이 썼던 변수 선언과 while문을 조금만 수정하면 for문으로 묶을 수 있었다.
그 과정에서 배우는 것이 많기 때문에 코드를 줄여보는 경험은 필수적이라고 생각한다.
- 정확도 테스트 결과
- 효율성 테스트 결과
3차 풀이
function solution(n) {
let answer = 1;
for(let i = 1; i <= n/2; i++) {
let temp = n;
let num = i;
while(temp > 0) {
temp -= num ++;
if(!temp) answer ++;
}
}
return answer;
}
'Coding test' 카테고리의 다른 글
[프로그래머스] 최솟값 만들기 (Lv 2) - javascript (0) | 2022.05.19 |
---|---|
[프로그래머스] 최댓값과 최솟값 (Lv 2) - javascript (0) | 2022.05.19 |
[프로그래머스] 다음 큰 숫자 (Lv 2) - javascript (0) | 2022.05.19 |
[프로그래머스] 올바른 괄호 (Lv 2) - javascript (0) | 2022.05.17 |
[프로그래머스] 124 나라의 숫자 (Lv 2) - javascript (0) | 2022.05.17 |