백준 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

+ Recent posts