상근이는 2863번에서 표를 너무 열심히 돌린 나머지 5와 6을 헷갈리기 시작했다.
상근이가 숫자 5를 볼 때, 5로 볼 때도 있지만, 6으로 잘못 볼 수도 있고, 6을 볼 때는, 6으로 볼 때도 있지만, 5로 잘못 볼 수도 있다.
두 수 A와 B가 주어졌을 때, 상근이는 이 두 수를 더하려고 한다. 이때, 상근이가 구할 수 있는 두 수의 가능한 합 중, 최솟값과 최댓값을 구해 출력하는 프로그램을 작성하시오.
첫째 줄에 두 정수 A와 B가 주어진다. (1 <= A,B <= 1,000,000)
첫째 줄에 상근이가 구할 수 있는 두 수의 합 중 최솟값과 최댓값을 출력한다.
솔직히 왜 그리디인지 모르겠다.. 단순 문자열 문제 느낌
- min을 구할땐 숫자에 포함된 6을 전부 5로 바꾼 후 a+b
- max를 구할땐 숫자에 포함된 5를 전부 6으로 바꾼 후 a+b
#include <iostream>
#include <bits/stdc++.h>
#include <string>
using namespace std;
int main()
{
string a,b; // 문자열로 a,b 입력 받기
cin >> a >> b;
int min, max;
// min구하기 -> 만약 6이 있으면 5로 바꾼다 (a,b both)
for (int i = 0; i < a.length(); i++)
{
if (a[i] == '6')
{
a[i] = '5';
}
if (b[i] == '6')
{
b[i] = '5';
}
}
// 정수형으로 변환 후 min 구하기
min = std::stoi(a) + std::stoi(b);
// max구하기 -> 만약 5가 있으면 6으로 바꾼다 (a,b both)
for (int j = 0; j < a.length(); j++)
{
if (a[j] == '5')
{
a[j] = '6';
}
if (b[j] == '5')
{
b[j] = '6';
}
}
// 정수형으로 변환 후 max 구하기
max = std::stoi(a) + std::stoi(b);
// 답 출력
cout << min << " " << max << endl;
return 0;
}