백엔드 공부를 하면서 CodeUp 기초 문제를 하나씩 풀어보고 있습니다.
이번 글은 CodeUp 1258번 풀이 기록입니다. 문제 원문은 출처 링크에서 확인할 수 있고, 여기서는 제가 어떻게 생각하고 Java 코드로 풀었는지 정리합니다.
문제
정수 n을 입력받습니다.
그리고 1부터 n까지의 모든 정수를 더한 값을 출력해야 합니다.
예를 들어 n이 5라면 아래 값을 구합니다.
1 + 2 + 3 + 4 + 5 = 15
즉, 핵심은 정해진 범위의 숫자를 차례대로 더하는 것입니다.
처음 떠오르는 생각
처음에는 빈 상자에 숫자를 하나씩 담는다고 생각했습니다.
합계를 담을 변수 sum을 먼저 0으로 준비합니다.
그다음 1부터 n까지 숫자를 하나씩 꺼내서 sum에 더합니다.
흐름은 이렇게 볼 수 있습니다.
sum = 0
1을 더함 -> sum = 1
2를 더함 -> sum = 3
3을 더함 -> sum = 6
...
n을 더함 -> 정답
이 문제에서 필요한 생각은 두 가지입니다.
for문으로 1부터n까지 반복합니다.sum변수에 값을 계속 누적합니다.
핵심 아이디어
누적은 기존 값에 새 값을 더해서 다시 저장하는 방식입니다.
sum = sum + i;
Java에서는 이 코드를 아래처럼 짧게 쓸 수 있습니다.
sum += i;
두 코드는 같은 의미입니다.
현재 sum 값에 i를 더해서 다시 sum에 넣습니다.
sum은 반복문이 시작되기 전에 만들어야 합니다.
반복문 안에서 새로 만들면 매번 값이 초기화되어 합계를 쌓을 수 없습니다.
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
System.out.println(sum);
}
}
코드 해설
먼저 입력을 받습니다.
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
n은 마지막 숫자입니다.
n이 10이면 1부터 10까지 더합니다.
합계를 저장할 변수도 준비합니다.
int sum = 0;
처음에는 아직 아무 숫자도 더하지 않았기 때문에 0으로 시작합니다.
반복문은 1부터 n까지 진행합니다.
for (int i = 1; i <= n; i++) {
sum += i;
}
i는 현재 더할 숫자입니다.
i <= n 조건을 사용했기 때문에 n까지 포함해서 더합니다.
마지막으로 결과를 출력합니다.
System.out.println(sum);
실행 예시
입력이 아래와 같다고 해보겠습니다.
5
반복문 안에서는 다음 순서로 계산됩니다.
| i | 계산 후 sum |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
출력은 다음과 같습니다.
15
복잡도
반복문은 1부터 n까지 한 번씩 실행됩니다.
n이 10이면 10번 더하고, n이 100이면 100번 더합니다.
입력이 커지는 만큼 반복 횟수도 같이 늘어납니다.
그래서 시간복잡도는 O(n)입니다.
추가로 사용하는 변수는 n, sum, i 정도입니다.
입력 크기가 커져도 따로 큰 배열을 만들지 않습니다.
공간복잡도는 O(1)입니다.
실수하기 쉬운 부분
sum을 반복문 안에서 선언하면 안 됩니다.
for (int i = 1; i <= n; i++) {
int sum = 0;
sum += i;
}
이렇게 쓰면 반복할 때마다 sum이 0으로 다시 만들어집니다.
값이 계속 쌓이지 않으므로 누적이 되지 않습니다.
또 하나는 클래스 이름입니다.
CodeUp에 Java 코드를 제출할 때는 보통 클래스 이름을 Main으로 작성합니다.
public class Main {
}
로컬에서 연습할 때 파일 이름을 다르게 만들 수는 있지만, 제출할 때는 채점 사이트의 규칙에 맞춰야 합니다.
정리
CodeUp 1258번은 반복문과 누적 변수를 연습하기 좋은 기초 문제입니다.
풀이 흐름은 단순합니다.
sum을 0으로 준비합니다.for문으로 1부터n까지 반복합니다.sum += i로 값을 계속 더합니다.- 마지막에
sum을 출력합니다.
이 문제를 풀면서 반복문은 단순히 같은 코드를 반복하는 문법이 아니라, 값을 차곡차곡 쌓는 방식으로도 자주 사용된다는 점을 확인할 수 있습니다.