📑 문제

✏️ 풀이
재영
function solution(n) { let cnt = 0; let now = 0; let [ start, end ] = [ 1, 1 ]; while (start <= n) { while (now < n && end <= n) { now += end; end++; } if (now === n) cnt++; now -= start; start++; } return cnt; }
효성
✨답지 안봤음!!!✨ 구ㅡ웃 어ㅡ썸👍 - 재영
function solution(n) { let answer = 0; for(let i =1; i<n; i++) { let prev = i; let curr = i+1; while(prev+curr <= n) { if(prev+curr === n) { answer++; prev += curr; curr++; } else { prev += curr; curr++; } } } return answer+1; }
- n개의 숫자를 돌면서 (for문)
- 이전 값과 현재 값을 더하며 n을 충족하는지를 판단 (while문)
- 순서를 하나씩 생각해보며 풀이를 작성하는 게 맞을까? 시간도 오래 걸리고 실수가 많다..
- 이전값과 현재값을 판단하는 코드가 겹침. 뭔가 중복되는 느낌이 있는 것 같음.
//중복된 코드 제거법!! (feat.코테킹 은찬) while(prev+curr <= n) { if(prev+curr === n) { answer++; } prev += curr; curr++; }
은찬
function solution(n) { let answer = 0; let start = 1; while(start <= n){ let tmp = 0; for(let i = start; tmp <= n; i++){ tmp += i; if(tmp === n){ answer++; } } start++; } return answer; }
간단하게 while문과 for문을 사용해 풀었습니다.
우선 start는 1로 초기화하여 n보다 작을 때까지 while문을 반복합니다.
start는 연속된 숫자의 시작 수입니다.
for문을 통해 연속되는 숫자의 합이 n인지 확인합니다.
숫자의 합을 나타내는 tmp로 i 값을 누적시킵니다.
만약 tmp가 n이 된다면 answer을 하나 늘려줍니다.
tmp가 n이 넘으면 자동으로 for문을 빠져나옵니다.
for문이 끝나면 start 또한 + 1 해주어 시작 수를 늘려주도록 합니다.
모든 while문이 끝나면 답을 리턴합니다.