프로그래밍을 시작하는 이들에게 기본적인 산술 연산과 조건문은 가장 먼저 접하게 되는 개념이다. 이번 포스팅에서는 백준 온라인 저지의 31654번 문제인 “Adding Trouble"을 해결하면서 이러한 기초 개념을 다시 한 번 되새겨보자.
문제 : https://www.acmicpc.net/problem/31654
문제 설명
당신의 친구 Bob은 숫자 더하기에 매우 서툴다. 그는 계산이 올바른지 확인하기 위해 당신의 도움이 필요하다. 세 정수 \( A \), \( B \), \( C \)가 주어졌을 때, \( A + B = C \)인지 확인하고 Bob이 정확하게 더했는지 판단해야 한다.
입력:
- 한 줄에 세 정수 \( A, B, C \)가 공백으로 구분되어 주어진다.
- 각 정수는 \( -10^9 \leq A, B, C \leq 10^9 \) 범위를 가진다.
출력:
- \( A + B = C \)이면 “correct!“를 출력한다.
- 그렇지 않으면 “wrong!“을 출력한다.
예제 입력 1:
|
|
예제 출력 1:
|
|
예제 입력 2:
|
|
예제 출력 2:
|
|
예제 입력 3:
|
|
예제 출력 3:
|
|
이 문제는 간단해 보이지만 몇 가지 고려해야 할 사항이 있다. 입력되는 정수의 범위가 매우 크기 때문에 프로그래밍 언어별로 적절한 데이터 타입을 선택해야 한다. 또한, 부호 있는 정수의 연산에서 발생할 수 있는 오버플로우를 방지하기 위해 주의가 필요하다.
접근 방식
이 문제를 해결하기 위해 다음과 같은 단계를 따른다:
입력 처리: 세 개의 정수 \( A, B, C \)를 입력받는다. 이때 정수의 범위가 \( -10^9 \)부터 \( 10^9 \)까지이므로, C++에서는
long long
타입을 사용하고, Python에서는 기본int
타입을 사용하면 충분하다.산술 연산: \( A + B \)를 계산한다.
조건 비교: 계산한 결과와 \( C \)를 비교한다.
결과 출력: 비교 결과에 따라 “correct!” 또는 “wrong!“을 출력한다.
시간 복잡도는 입력 크기에 관계없이 항상 일정하므로 \( O(1) \)이다.
C++ 코드와 설명
|
|
코드의 동작 단계별 설명
입력 받기:
cin >> A >> B >> C;
를 통해 사용자로부터 세 정수를 입력받는다.long long
타입을 사용하여 큰 범위의 정수를 안전하게 저장한다.
계산 및 비교:
if (A + B == C)
조건문을 사용하여 \( A + B \)와 \( C \)를 비교한다.
결과 출력:
- 조건이 참이라면
cout << "correct!" << endl;
을 실행하여 “correct!“를 출력한다. - 조건이 거짓이라면
cout << "wrong!" << endl;
을 실행하여 “wrong!“을 출력한다.
- 조건이 참이라면
프로그램 종료:
return 0;
을 통해 프로그램을 정상적으로 종료한다.
C++ without library 코드와 설명
|
|
코드의 동작 단계별 설명
입력 받기:
scanf("%lld %lld %lld", &A, &B, &C);
를 사용하여 세 정수를 입력받는다.long long
타입에 맞게%lld
포맷 지정자를 사용한다.
계산 및 비교:
if (A + B == C)
조건문을 통해 \( A + B \)와 \( C \)를 비교한다.
결과 출력:
- 조건이 참이라면
printf("correct!\n");
을 실행한다. - 조건이 거짓이라면
printf("wrong!\n");
을 실행한다.
- 조건이 참이라면
프로그램 종료:
return 0;
으로 프로그램을 종료한다.
Python 코드와 설명
|
|
코드의 동작 단계별 설명
입력 받기 및 변환:
input().split()
을 통해 입력 받은 문자열을 공백 기준으로 분리한다.map(int, ...)
을 사용하여 분리된 문자열을 정수로 변환한다.- 변환된 정수를
A
,B
,C
에 각각 저장한다.
계산 및 비교:
if A + B == C:
조건문으로 \( A + B \)와 \( C \)를 비교한다.
결과 출력:
- 조건이 참이면
print("correct!")
를 실행한다. - 조건이 거짓이면
print("wrong!")
를 실행한다.
- 조건이 참이면
결론
이 문제는 매우 간단한 구현 문제로, 기본적인 산술 연산과 조건문을 통해 쉽게 해결할 수 있었다. 하지만 입력 값의 범위가 크기 때문에 프로그래밍 언어별로 적절한 데이터 타입을 선택하는 것이 중요하다. 특히 C++에서는 int
대신 long long
을 사용하여 오버플로우를 방지해야 했다.
이러한 단순한 문제라도 데이터 타입과 입력 범위에 대한 세심한 주의가 필요함을 다시 한 번 깨달았다. 프로그래밍에서 기본기를 탄탄히 다지는 것이 얼마나 중요한지 알 수 있는 좋은 기회였다.