백준풀기

[c++] 백준 2864번 5와 6의 차이

해언뵤 2024. 1. 25. 02:59

문제

상근이는 2863번에서 표를 너무 열심히 돌린 나머지 5와 6을 헷갈리기 시작했다.
상근이가 숫자 5를 볼 때, 5로 볼 때도 있지만, 6으로 잘못 볼 수도 있고, 6을 볼 때는, 6으로 볼 때도 있지만, 5로 잘못 볼 수도 있다.
두 수 A와 B가 주어졌을 때, 상근이는 이 두 수를 더하려고 한다. 이때, 상근이가 구할 수 있는 두 수의 가능한 합 중, 최솟값과 최댓값을 구해 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 두 정수 A와 B가 주어진다. (1 <= A,B <= 1,000,000)

 

출력

첫째 줄에 상근이가 구할 수 있는 두 수의 합 중 최솟값과 최댓값을 출력한다.

 

 

문제풀이

풀면서 뭔가 for문을 4번이나 반복하게 만드는게 맞나,, 싶었지만 다 푼 후 조금 찾아보니 이게 맞는 듯 싶다 ㅎ
원리는 간단하다. a와 b 모두 6을 5로 바꿔 최소값을 구해주고 5를 6으로 바꿔 최대값을 구해준 다음 최소값끼리, 최댓값끼리 더해주면 된다.
나는 한자리한자리 보고 싶어서 string으로 받은 다음 5<->6해주고 stoi()함수를 이용해서 문자열을 숫자로 바꿔주었다.
기억해야할 점은 '0'을 빼는 방법은 char형에서만 가능한 것이였다 !! 문자형을 바꾸려면 위의 함수를 써야한다.
#include <iostream>
#include <string>
using namespace std;

int main(){
    string a, b, a2, b2;

    cin >> a >> b;
    a2 = a;
    b2 = b;
    for (int i = 0; i < a.length(); i++){
        if (a[i] == '6') a[i] = '5';
    }
    int amin = stoi(a);
    for (int i = 0; i < a.length(); i++){
        if (a2[i] == '5') a2[i] = '6';
    }
    int amax = stoi(a2);
    for (int i = 0; i < b.length(); i++){
        if (b[i] == '6') b[i] = '5';
    }
    int bmin = stoi(b);
    for (int i = 0; i < b.length(); i++){
        if (b2[i] == '5') b2[i] = '6';
    }
    int bmax = stoi(b2);

    cout << amin+bmin << " " << amax+bmax;
}

'백준풀기' 카테고리의 다른 글

[c++] 백준 10809번 알파벳 찾기  (1) 2024.01.25
[c++] 백준 10773번 제로  (1) 2024.01.25
[c++] 백준 11399번 ATM  (1) 2024.01.25
[c++] 백준 5585번 거스름돈  (0) 2024.01.25
[c++] 백준 2750번 수 정렬하기 (정렬)  (0) 2024.01.25