728x90
문제
강민이는 동생 희주를 위해 수학 문제를 만들고 있다. 희주는 매일 연습하고 열심히 공부했지만, 아직도 더하기를 끝내지 못했다.
숫자를 더할 때, 오른쪽부터 왼쪽으로 가면서 숫자를 하나씩 더한다. 그런데 희주는 귀찮아서 "받아 올림"을 하지 않고 그냥 두 숫자의 합을 적어버린다.
예를 들면, 희주는 숫자 123과 2495를 아래와 같이 더한다.
1 2 3 + 2 4 9 5 ---------------- 2 5 11 8
그래서 답을 적을 때 25118을 적는 것이었다.
만약 모든 숫자를 다 이렇게 더한다면 결과가 어떻게 나오는 지 프로그램으로 작성하시오.
입력
두 정수 A, B가 공백을 두고 주어진다. A와 B는 1과 1,000,000 사이의 정수이다.
출력
희주 방식대로 더한 결과를 출력한다.
예제 입력 1 복사
512 444
예제 출력 1 복사
956
문자열 처리 문제이다.
두 개의 문자열 A와 B에서 각 자리수를 그대로 더하고, 올림을 하지 않으면 된다.
덧셈 구현에서 자리수를 어떻게 처리할 지 고민했는데, 두 인덱스 변수를 통해 각 끝자리에서 0자리까지는 그대로 더한 후 A와 B에서 남은 자리수가 있으면 그대로 벡터에 넣도록 했다.
예를들어 1234와 12를더한다면 34+12결과인 4 와 6을 반복문을 통해 벡터에 넣는다. 그 후 1234에서 1과 2를 벡터에 넣는다. 벡터는 6 - 4 - 2 - 1이 들어갔으므로 거꾸로 1246을 출력하면 된다.
크게 어려움 없는 문자열 문제였다.
C++ 코드
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> res;
int main()
{
string A, B;
cin >> A >> B;
int i = A.length(), j = B.length();
for (; i >= 0 && j >= 0; i--,j--) {
int a = A[i] - '0';
int b = B[j] - '0';
res.push_back(a + b);
}
while (i >= 0)
res.push_back(A[i--] - '0');
while (j >= 0)
res.push_back(B[j--] - '0');
for (int i = res.size() - 1; i > 0; i--) {
cout << res[i];
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 소수의 곱 (2014번) (0) | 2020.08.12 |
---|---|
[백준] 반지 (5555번) (0) | 2020.08.12 |
[백준] 구간 곱 구하기 (11505번) (0) | 2020.08.12 |
[백준] Java vs C++ (3613번) (0) | 2020.08.11 |
[백준] 로봇 조종하기 (2169번) (0) | 2020.07.27 |