숫자의 표현
문제 설명
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 | result |
15 | 4 |
코드 해석 및 전체 코드
1. 반환할 값의 초깃값 1로 설정
예시를 보면 자기 자신의 수도 연속된 수로 포함하기에 자신의 수를 미리 더한 상태에서 시작
2. for문 n/2만큼 반복
예시에서 7 + 8 = 15처럼, 15 절반의 수인 7은 8과 더했을 때 15를 얻을 수 있지만, 8 이상의 수의 연속된 숫자는 15의 수를 넘기에 n/2만큼만 반복했다.
3. 더해진 값 저장할 변수와 더해질 변수 선언
더해질 값인 i의 초깃값은 k로 잡는다. 처음 수인 1부터 연속된 숫자를 구하고, 다음 반복에선 2부터 연속된 수, ...로 15를 만들 수 있는 수를 구하기에 초깃값을 1부터 시작하였다.
4. sum이 n보다 작을 때까지 반복하여 i 더하기
연속된 숫자의 합이 15이상이면 조건과 불일치해 15보다 작을 때까지만 반복한다.
만약 i가 4이고 sum이 0이라면,
i | sum | sum < n |
4 | 0 | O |
5 | 4 | O |
6 | 9 | O |
7 | 15 | X |
i가 7일 때 sum은 15로 while문 반복을 종료한다.
5. sum과 i가 같으면 반환값에 1 더함
while문 반복을 마쳤을 때 sum이 15이므로 반환할 변수 answer에 1을 더함
function solution(n) {
var answer = 1;
for (let k = 1; k <= n / 2; k++) {
let sum = 0;
let i = k;
while (sum < n) sum += i++;
if (sum == n) answer++;
}
return answer;
}
'코딩 테스트 > [JS] programmers 코딩 테스트 연습' 카테고리의 다른 글
[Programmers/JS] 이진 변환 반복하기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.30 |
---|---|
[Programmers/JS] 다음 큰 숫자 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.27 |
[Programmers/JS] 최댓값과 최솟값 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.25 |
[Programmers/JS] 최솟값 만들기 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.24 |
[Programmers/JS] 행렬의 곱셈 / 프로그래머스 코딩 테스트 연습 (0) | 2021.12.23 |
댓글