백준 2018번
- 해당 문제는 연속하는 숫자들의 합이라는 점에서 풀기 수월했던 문제이다.
https://www.acmicpc.net/problem/2018
2018번: 수들의 합 5
어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한
www.acmicpc.net
처음이자 정답으로 제출한 코드
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim();
//항상 자기자신으로 표현이 가능하므로 최소치 = 1
let result = 1;
let number = +input;
//입력받은 숫자의 반만큼만 반복
for(let i = 1; i <number/2;i++){
let check = i;
let num_plus = i+1;
//연속하는 숫자의 합을 더해보다가 입력받은 숫자보다 높아지면 중지
while(check < number){
check += num_plus;
num_plus++;
}
//연속한 숫자를 더한값이 입력값과 같으면 결과값 +1
if(check==number){
result++;
}
}
console.log(result);
이 문제를 보고 생각한 풀이법은 다음과 같다.
1. 연속하는 숫자의 반만큼 반복하는 반복문을 만든다.
(반이상의 연속하는 숫자를 더하면 무조건 입력받은 값을 넘기때문)
2. 1부터 시작하여 연속하는 숫자들의 합을 구해본다.
1부터 시작하여
1 + 1 = 2
2 + 2 = 4
3 + 3 = 6
6 + 4 = 10
...
이를 반복하다 입력받은 값보다 커지면 반복을 멈춘다.
3. 위 반복문에서 나온값이 입력값과 같으면 결과값에 + 1 을 해준다.
위 문제는 반복문을 잘다루는것이 핵심이었던거 같다. 왜냐하면 계속 1씩 증가하는 변수와 그 값을 더해서 입력값과 비교할 값 이 두가지 값을 한 반복문안에서 적절히 사용해야하기 때문이다. 어떻게 풀지 생각해낸 이후로 생각보다 쉽게 구현하여 풀 수 있었던 문제였다.
'백준' 카테고리의 다른 글
백준 1193번 "분수찾기" (1) | 2024.04.20 |
---|---|
백준 1417번 "소트인사이드" (0) | 2024.04.16 |
백준 1384번 "메시지" (1) | 2024.04.14 |
백준 1316번 "그룹 단체 체커" (0) | 2024.04.13 |
백준 1475번 "방번호" (0) | 2024.04.12 |