프로그래밍을 시작하는 이들에게 기본적인 산술 연산과 조건문은 가장 먼저 접하게 되는 개념이다. 이번 포스팅에서는 백준 온라인 저지의 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을 사용하여 오버플로우를 방지해야 했다.
이러한 단순한 문제라도 데이터 타입과 입력 범위에 대한 세심한 주의가 필요함을 다시 한 번 깨달았다. 프로그래밍에서 기본기를 탄탄히 다지는 것이 얼마나 중요한지 알 수 있는 좋은 기회였다.
![Featured image of post [Algorithm] C++/Python 백준 31654번 : Adding Trouble](/post/algorithm/2024-11-26-boj-31654/tmp_wordcloud_hu_27e1a2ec00032a92.png)
![[Algorithm] C++/Python 백준 12928번 : 트리와 경로의 길이](/post/algorithm/2024-12-12-boj-12928/tmp_wordcloud_hu_a734fa26aeb06d88.png)
![[Algorithm] C++/Python 백준 4792번 : 레드 블루 스패닝 트리](/post/algorithm/2024-12-12-boj-4792/tmp_wordcloud_hu_185642dbbb3b77b.png)
![[Algorithm] C++/Python 백준 31654번 : Adding Trouble](/post/algorithm/2024-11-26-boj-31654/tmp_wordcloud_hu_39796e5f2ccf54a.png)
![[Algorithm] C++/Python 백준 10828번 : 스택](/post/algorithm/2024-10-25-boj-10828/tmp_wordcloud_hu_93a419dc7063f688.png)
![[Algorithm] C++/Python 백준 1225번 : 이상한 곱셈](/post/algorithm/2024-10-25-boj-1225/tmp_wordcloud_hu_62a68801a6443074.png)
![[Algorithm] C++/Python 백준 7523번 : Gauß 다국어](/post/algorithm/2024-10-25-boj-7523/tmp_wordcloud_hu_42a4e033a2e857e7.png)
![[Algorithm] C++/Python 백준 2166번 : 다각형의 면적](/post/algorithm/2025-01-10-boj-2166/index_hu_b1a292c765f1088e.png)
![[Algorithm] C++/Python 백준 20149번 : 선분 교차 3](/post/algorithm/2024-12-30-boj-20149/index_hu_ee1179daa4165ba3.png)
![[Algorithm] C++/Python 백준 25501번 : 재귀의 귀재](/post/algorithm/2024-10-25-boj-25501/tmp_wordcloud_hu_772ee0523ffc09ab.png)