Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
정확성 테스트 통과 / 효율성 테스트 3실패
function solution(n) {
let result = 1;
for(let i = 1; i <= n/2; i++) {
let sum = 0
for(let j = i; j <= n; j++) {
sum += j
if(sum == n) result += 1
if(sum > n) break;
}
}
return result;
}
정확성 테스트 통과 / 효율성 테스트 4실패
function solution(n) {
let result = 1;
for(let i = 1; i <= n/2; i++) {
let sum = 0
let temp = i
while(sum < n) {
sum += temp
temp += 1
if(sum == n) {
result += 1
}
}
}
return result;
}
정확성 테스트 통과 / 효율성 테스트 1실패
function solution(n) {
let result = 0;
for(let i = 1; i <= n; i++) {
if(checkNum(i, 0, n)) result += 1
}
return result;
}
function checkNum(current, sum, n) {
if(sum == n) return true;
if(sum > n) return false;
return checkNum(current + 1, sum + current, n)
}
....ㅎ 여기까지 오니 화딱지났음. 뭐가 문제야 대체ㅠ 하다가 호옥시 checkSum 함수에서 sum > n
을 sum == n
보다 체크하는게 문젠가..? 싶어서 둘의 위치를 바꿔봤다. 그랬더니 통과...! 근데 이렇게 하면 통과인 이유를 명확하게 설명할 순 없지만 일단 통과했다..ㅎ
혹시 이유 아시는 분 저도 좀 알려주세요...!
function solution(n) {
let result = 0;
for(let i = 1; i <= n; i++) {
if(checkNum(i, 0, n)) result += 1
}
return result;
}
function checkNum(current, sum, n) {
if(sum > n) return false;
if(sum == n) return true;
return checkNum(current + 1, sum + current, n)
}
✔문제출처: 프로그래머스