문제 출처: www.acmicpc.net/problem/10757
1. 코드
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string a, b;
cin >> a >> b;
string result(max(a.length(), b.length()), '0');
int key = 0;
for (int i = 0; i < result.length(); i++)
{
int sum = key;
key = 0;
if (i < a.size())
sum += a[a.length() - i - 1] - '0';
if (i < b.size())
sum += b[b.length() - i - 1] - '0';
if (sum > 9)
{
key = 1;
sum -= 10;
}
result[result.length() - i - 1] = sum + '0';
}
if (key)
cout << 1;
cout << result;
return 0;
}
2. 풀이
string a, b;
cin >> a >> b;
string result(max(a.length(), b.length()), '0');
int key = 0;
문자열 a와 b에 두 수를 입력하고 a와 b 중 더 긴 길이인지 판별하고 그 길이만큼 '0'으로 채워준다. 그리고 key값을 0으로 초기화한다. key값이 1이라면 자릿수가 증가한다는 신호이니 0으로 초기화한다.
for (int i = 0; i < result.length(); i++)
{
int sum = key;
key = 0;
result의 길이만큼 반복을 하는데 우선 sum의 값을 key값으로 초기화를 진행하고 key값을 0으로 다시 초기화시켜준다.
if (i < a.size())
sum += a[a.length() - i - 1] - '0';
if (i < b.size())
sum += b[b.length() - i - 1] - '0';
sum값에 a의 마지막 순서에 위치한 배열부터 접근하여 '0'을 빼주는데 그 이유는 정수로된 문자를 다시 정수로 바뀌게 된다. 그러면 sum에는 배열에 저장되어있던 정수를 그대로 저장할 수 있다. 배열 b도 똑같이 해준다.
if (sum > 9)
{
key = 1;
sum -= 10;
}
그리고 만약 sum이 9를 초과하면 즉, 10 이상의 수가 된다면 key값을 1로 초기화하고 sum에는 10을 빼준다.
result[result.length() - i - 1] = sum + '0';
그리고 result의 마지막 순서부터 순차적으로 sum에 저장된 정수에 '0'을 더한 값으로 초기화해주는데 result은 문자열 배열이기 때문에 정수를 문자로 변환시켜준다.
if (key)
cout << 1;
위 반복문이 끝이 났는데 key값이 1이라면 먼저 1을 출력을 해준다. 왜냐하면 result의 길이는 a혹은 b의 길이와 동일한데 key값이 1이라는 것은 자릿수가 증가했다는 것인데 한정된 길이에서 이 증가된 자릿수를 표현해줄 수 없기 때문에 증가된 1을 먼저 출력한다.
cout << result;
그리고 result을 출력해주면 정답이다.
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 1436번: 영화감독 숌 [C++] (0) | 2021.02.05 |
---|---|
백준 알고리즘 1018번: 체스판 다시 칠하기 [C++] (0) | 2021.02.04 |
백준 알고리즘 3052번: 나머지 [C++] (0) | 2021.01.06 |
백준 알고리즘 2577번: 숫자의 개수 [C++] (0) | 2021.01.02 |
백준 알고리즘 2562번: 최댓값 (0) | 2020.12.26 |