<소스코드>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
string a, b;
vector<int> v;
int num;
string answer;
cin >> a >> b;
reverse(a.begin(),a.end()); //배운점
reverse(b.begin(),b.end());
//배운점
int length = (a.length() == b.length()) ? a.length() : (a.length() > b.length()) ? b.length() : a.length();
int check = (b.length() == a.length()) ? 0 : (a.length() == length) ? 2 : 1;
for(int i = 0; i < length; i++) {
num = ((a[i]-'0')+(b[i]-'0'));
v.push_back(num);
}
if(check == 1){
for(int i = length; i < a.length(); i++){
num = (a[i]-'0');
v.push_back(num);
}
}else{
for(int i = length; i < b.length(); i++){
num = (b[i]-'0');
v.push_back(num);
}
}
for(int i = 0; i <v.size()-1; i++){
if(v[i] >= 10){
v[i+1]++;
v[i] -= 10;
}
answer += to_string(v[i]);
}
reverse(answer.begin(),answer.end());
string end = to_string(v[v.size()-1]);
end += answer;
cout << end << endl;
return 0;
}
- 변수
string a, b : 입력받는 숫자
vector<'int'> v: num을 가지는 벡터
int num : 각 자리수를 더한 값
string answer : vector에 있는 값들의 문자열
string end : 최종 문자열
int length : 문자열의 길이
int check : a와 b의 문자열 관계
- 알고리즘
1) 문자열을 입력받아서 뒤집는다.
그 이유는 문자열의 길이가 다른 경우 일의 자리수부터 비교하면서 더해줘야 하는데 앞에서부터 비교하면 자리수가 달라지기 때문이다. 그래서 뒤집어서 계산 후 다시 뒤집는 방법을 선택했다.
ex) 1234, 234 ->앞에서 : 3574 (x)
2) length와 check의 값을 이중 삼항연사자를 통해서 정해준다.
length는 같으면 상관x, 다르면 짧은거 기준으로
check는 같으면 0, a라면 2, b라면 1로 정한다.
3) for문을 돌리면서 a,b의 각 자리수의 값을 정수형으로 변환하여 벡터에 삽입한다.
4) 길이가 다를 경우 나머지 값들을 정수로 변환하여 벡터에 삽입한다.
5)벡터의 처음부터 끝까지 값을 string answer에 더해준다.
이때 v[i]값이 10보다 클 경우 그 다음 자리수에 1을 더해주고 10을 빼준 값을 더해준다.
6) 이런식으로 하면 우리가 원하는 값에서 거꾸로 되고 최고자리수가 빈 문자열이 완성된다.
ex) 1234567 => 765432 이런식으로
7) 문자열을 다시 뒤집어준다. =>234567
8) end 문자열에 벡터의 마지막항을 문자열로 변환한다. 그리고 end값에 answer을 더해준다.
ex) 1 + 234567 => 1234567
- 배운점
- reverse(시작점,끝점) -> 문자열 거꾸로
헤더파일 : algorithm
ex)reverse(s.begin(), s.end())- 이중 삼항연산자 : (a == b ) ? 1 : (조건) ? 2 : 3
->이 코드랑 같은 거임if(조건문){1;} else{ if(){2;} else{3;}
- to_string() : 숫자 -> 문자열
- 아쉬운점&느낀점
algorithm 헤더파일을 사용해선 나름 잘 풀어낸 거 같다고 생각한다. 다른 풀이들도 찾아보니 애초에 문자열을 맞추기 위해서 앞에 0을 추가하는 방법, 그리고 뒤에서 부터 비교하면서 앞으로 값을 넘겨주는 방법 등 좋은 것이 많은 것같다.