관리 메뉴

cococo-coding

[C++ 풀이] 1357번. 뒤집힌 덧셈 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 1357번. 뒤집힌 덧셈

_dani 2024. 1. 26. 08:17

 

문제 분석

x와 y를 입력받으면 역순으로 뒤집은 상태로 더한다. 

더한 결과를 다시 역순으로 뒤집어 출력하는 문제이다.

 

알고리즘 설계

모든 자리수를 역순으로 만드는 함수를 Rev로 따로 정의해서 필요할때마다 호출해서 사용하도록 했다. 

 

string과 int형 변환을 왔다갔다해야해서 이 부분이 번거롭다. 

 

1. 우선 처음 입력받는 수는 int로 받고, 역순으로 바꾸기전에 to_string으로 형변환한다.

2. 역순으로 바꾸기 위해 reverse함수를 사용할 건데, int형으로는 사용하지 못 하므로 미리 string으로 바꾸는 것이다.

3. 그리고 reverse함수로 역순으로 바꾼 후에 다시 stoi함수로 int형으로 돌려준다.

int형으로 다시 돌리는 이유는 덧셈 연산을 해야하기 때문이고, 특정 문자(001)에는 0이 앞에 있기때문에 이를 없애기 위해서다. 

 

코드

#include <iostream>
#include <string>
#include <algorithm> //reverse함수
using namespace std;
/*
1. x y 입력받음
2. x y -> rev처리
3. rev(x)+rev(y) 구하기
4. 3번 다시 rev처리
*/

//rev함수
int rev(int num) {
    string s=to_string(num);
    reverse(s.begin(), s.end());
    return stoi(s);
}

int main() {
    //1
    int x, y;
    cin >> x >> y;

    //2
    cout << rev(rev(x) + rev(y));

    return 0;
}

 

느낀 점

백준문제에 to_string(string으로 변환해야 할 때)나 stoi(string to int) 함수가 많이 쓰이는 것 같다.

reverse함수도 은근 자주 쓰이니 정리해두면 좋을 것 같다.