백준 10570_큰 수 A+B.cpp

hello_hidi·2021년 7월 11일
0

baekjoon_C++

목록 보기
25/33
post-thumbnail

<소스코드>

#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;
}
  1. 변수
    string a, b : 입력받는 숫자
    vector<'int'> v: num을 가지는 벡터
    int num : 각 자리수를 더한 값
    string answer : vector에 있는 값들의 문자열
    string end : 최종 문자열
    int length : 문자열의 길이
    int check : a와 b의 문자열 관계
  1. 알고리즘
    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
  1. 배운점
  • reverse(시작점,끝점) -> 문자열 거꾸로
    헤더파일 : algorithm
    ex)reverse(s.begin(), s.end())
  • 이중 삼항연산자 : (a == b ) ? 1 : (조건) ? 2 : 3
    ->이 코드랑 같은 거임
if(조건문){1;}
else{
    if(){2;}
    else{3;}
  • to_string() : 숫자 -> 문자열
  1. 아쉬운점&느낀점
    algorithm 헤더파일을 사용해선 나름 잘 풀어낸 거 같다고 생각한다. 다른 풀이들도 찾아보니 애초에 문자열을 맞추기 위해서 앞에 0을 추가하는 방법, 그리고 뒤에서 부터 비교하면서 앞으로 값을 넘겨주는 방법 등 좋은 것이 많은 것같다.
profile
안뇽희디

0개의 댓글