IT/BaekJoon

[JAVA] 백준 8393번 합 문제 자세한 풀이

Buang 2023. 4. 2. 22:20
반응형

1. 문제

https://www.acmicpc.net/problem/8393

 

8393번: 합

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

www.acmicpc.net

 


2. 풀이

 

"n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오."

 

내가 3을 입력하면 1부터 3까지의 합

1 + 2 + 3 = 6 이란 결과값이 나오도록 해야 한다.

 

- 만약 사용자가 3을 입력할 경우 코드에선

0 + 1 = 1

1 + 2 = 3

3 + 3 = 6

이렇게 3번의 덧셈 연산이 일어난다는 걸 알아둬야 한다.

 

- 사용자가 입력한 값(예시: 3)은 scanner를 사용해서 받으면 된다.

- 사용자가 입력한 값을 저장해 놓는 변수(n)를 생성한다.

> 4를 입력하면 1부터 4를 더해줄 수 있도록 만드는 것이고

이 4라는 숫자를 n이라는 공간에 저장해 놓는 것이다.

 

- 위에서 만약 사용자가 3을 입력할 경우 코드에선

0 + 1 = 1

1 + 2 = 3

3 + 3 = 6

이렇게 3번의 덧셈 연산이 일어난다고 했었다.

 

이때 덧셈의 결과값(빨강색으로 칠한 것)이 저장될 변수(sum)을 생성한다.

> 이유: 사용자가 3을 입력했다면 1부터 3까지의 합을 구해야 할 것이다.

위에서 보면 첫 번재로 이루어지는 연산은 0 + 1이다. 0+1의 결과값인 1이 저장되어야

두 번째로 이루어질 연산(1+2)에서 이 1이 사용될 수 있다.

 

덧셈의 결과값을 저장해 놓지 않으면

다음 연산을 이어갈 수 없다.


3. 코드

 

import java.util.Scanner;

public
class Main {

    public static void main ( String[] args ) {

        // n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt(); // 사용자가 입력한 N 값 저장
        scan.close();

        int sum = 0;

        //입력된 숫자만큼 더해줌
        for (int i=1; i<=n; i++) {
            sum += i; //sum = sum + i와 같다.

        }

        System.out.println(sum);
    }
}

 

실수했던 부분

 

- sum 변수는 for문이 바깥에 써야한다.

> for 문 안에 쓸 경우 덧셈 결과값이 초기화된다.

0 + 1 의 결과값인 1이 저장되어야 하는데

for 문 안에 int sum = 0;이라고 써버리면 1이란 결과값이 0으로 바껴버린다.

 

- for문 안에 System.out.println을 쓰면 안된다.

가령 내가 3을 입력했다고 해보자.

 

0 + 1 = 1

1 + 2 = 3

3 + 3 = 6

 

나는 3을 입력했을 때 6이란 최종 결과값만 얻고 싶은 데

1, 3, 6이라는 총 3개의 결과값을 얻게 된다.

반응형