[class 1]백준 A + B - C(31403번) 풀이 (C++/Python)
문제 : A + B - C(31403번)(Bronze IV)
문제 링크 : https://www.acmicpc.net/problem/31403
출처 : Baekjoon Online Judge
Javascript에서 문자열을 마치 숫자처럼 자동 연산이 된다고 합니다.
그래서 진짜인지 제가 직접 개발자 모드의 콘솔창에 들어가서 확인해보았습니다.

사실로 밝혀졌습니다.
Javascript는 문자열끼리 연산할 때 +는 합체하기, -는 뺄셈 연산하는 독특한 규칙이 존재합니다.
이걸 C++와 Python으로 구현해보겠습니다.
C++에서는 문자열을 숫자로 바꿔주는 함수를 만들어줍니다.
int str_to_int(string s) {
int size = s.size();
int result = 0;
int temp = 1;
for(int i = size - 1; i > -1; i--) {
result += (s[i] - '0') * temp;
temp *= 10;
}
return result;
}
반환값은 int, 매개변수는 string으로 되어 있는 함수입니다.
우선 size를 설정하여 temp(10^n 자리수를 위한 변수)를 1로 설정합니다.
예시로 문자열이 "345"라고 가정합니다.
그러면 size = 3이 나오고 각 루프마다 다음과 같은 연산이 이루어집니다.
1번째 루프 : result += 5 * 1이 되어 result = 5가 되고 temp는 10으로 변경됩니다.
2번째 루프 : result += 4 * 10이 되어 result = 45가 되고 temp는 100으로 변경됩니다.
3번째 루프 : result += 3 * 100이 되어 result = 345가 되고 temp는 1000으로 변경됩니다.
따라서 문자열 "345"가 정수 345로 변경됩니다.
이 함수를 바탕으로 전체 소스 코드를 구현하겠습니다.
#include <bits/stdc++.h>
using namespace std;
int str_to_int(string s) {
int size = s.size();
int result = 0;
int temp = 1;
for(int i = size - 1; i > -1; i--) {
result += (s[i] - '0') * temp;
temp *= 10;
}
return result;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string A, B, C;
cin >> A >> B >> C;
cout << str_to_int(A) + str_to_int(B) - str_to_int(C) << '\n';
cout << str_to_int(A + B) - str_to_int(C) << '\n';
return 0;
}
1번째 cout 코드는 정수 A + 정수 B - 정수 C의 결과값을 출력하고
2번째 cout 코드는 두 문자열 A와 B가 합쳐진 상태에서 정수로 변환하고 정수 C를 뺀 결과값입니다.
예시로 입력이 "3", "4", "5"로 주어진다고 가정할 때 각각
3 + 4 - 5 = 2
34 - 5 = 29
이렇게 연산됩니다.
Python은 이것보다 더 쉽습니다.
그냥 int()만 있으면 바로 해결되거든요.
import sys
input = sys.stdin.readline
A:int = input().rstrip()
B:int = input().rstrip()
C:int = input().rstrip()
print(int(A) + int(B) - int(C))
print(int(A+B) - int(C))
이렇게 보니 Python이 왜 C++보다 구현하기 더 쉬운지 여기서 한 눈에 들어오네요.
특히 난이도가 높을 수록 이 구현 난이도 차이는 더 심해집니다.
단, Python은 오버헤드가 큰 편이라 난이도가 높아질 수록 제시간 안에 통과하기가 더 어려워서 나중에 Programming Solving에 관심이 많다면 결국 C++로 옮기게 됩니다.
하지만 구현 난이도를 더 낮게 해서 빠른 개발이 가능한 Python도 충분히 가치가 있습니다.