코드
function solution(n) {
let count = 0;
for (let i = 0; i <= n; i++) {
let sum = 0;
for (let j = i + 1; j <= n; j++) {
sum += j;
if (sum === n) {
count++;
break;
}
}
}
return count;
}
처음에는 무식하게 이중for문으로 모두 순회를 하였더니
당연하게도 효율성에서 통과를 못했다
잘 모르곘어서 힌트를 보니까
2가지를 발견했는데
자연수 n을 연속한 자연수의 합으로 표현할 수 있는 개수는 n의 약수중 홀수의 개수와 같다
function solution(n) {
let count = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0 && i%2 == 1) count++;
}
return count;
}
또는
자연수 n을 i로 나눈 나머지가 0이면 count++ 그 후에 n에 i를 뺀다 그리고 count값
function solution(n) {
let count = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0) count++;
n -= i;
}
return count;
}
'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글
다리를 지나는 트럭 (0) | 2022.09.09 |
---|---|
피보나치 수 (0) | 2022.09.08 |
올바른 괄호 (0) | 2022.09.08 |
최솟값 만들기 (0) | 2022.09.08 |
이진 변환 반복하기 (0) | 2022.09.08 |