[백준] 그리디 2864번: 5와 6의 차이

C.K. ·2022년 5월 31일
0

baekjoon

목록 보기
4/67

문제

상근이는 2863번에서 표를 너무 열심히 돌린 나머지 5와 6을 헷갈리기 시작했다.

상근이가 숫자 5를 볼 때, 5로 볼 때도 있지만, 6으로 잘못 볼 수도 있고, 6을 볼 때는, 6으로 볼 때도 있지만, 5로 잘못 볼 수도 있다.

두 수 A와 B가 주어졌을 때, 상근이는 이 두 수를 더하려고 한다. 이때, 상근이가 구할 수 있는 두 수의 가능한 합 중, 최솟값과 최댓값을 구해 출력하는 프로그램을 작성하시오.

입력

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

출력

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

Approach

솔직히 왜 그리디인지 모르겠다.. 단순 문자열 문제 느낌

  • min을 구할땐 숫자에 포함된 6을 전부 5로 바꾼 후 a+b
  • max를 구할땐 숫자에 포함된 5를 전부 6으로 바꾼 후 a+b

Source Code

#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;
}
profile
1일 1알고리즘

0개의 댓글