[백준 2908] 상수
백준 2908번 - 상수
❓ 문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
✏️ 풀이
이 문제는 상근이 동생 상수의 이야기이다.
상수는 수학을 못하기 때문에, 숫자 두개를 주면, 그 숫자를 뒤집어서 대소 판정을 한다.
따라서, 우리는 상수가 말하는 큰 숫자를 찾아야 한다.
상수 바보 녀석ㅋ
무조건 세 자리 수라는 조건이 있다.
나는 이 문제를 이렇게 접근하였다.
- input을
string으로 받는다.
(혹은 int로 받고 to_string으로 바꿈) vector<char>
을 두 개 선언 해준다.(reverse를 하기 위함)- string 각 index에 -48 처리를 해주어 vector에 push한다.
- algorithm 라이브러리의 reverse를 사용하여 vector를 뒤집어준다.
- 그 후, vector 전체를 string으로 바꾼다.
- stoi를 이용하여 int로 뽑고 대소 판정을 한다.
더 간결히 짤 수 있을텐데 약간 복잡하게 짠 것 같다..
아래는 정답 코드이다.
✔️ 정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
vector<char> vec_A;
vector<char> vec_B;
int init_num (string temp, bool check);
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string A, B;
cin >> A >> B;
int a = init_num(A, true);
int b = init_num(B, false);
a > b ? cout << a : cout << b;
return 0;
}
int init_num (string temp, bool check) {
for (int i=0; i<temp.length(); i++) {
check ? vec_A.push_back(temp[i])
: vec_B.push_back(temp[i]);
}
check ? reverse(vec_A.begin(), vec_A.end())
: reverse(vec_B.begin(), vec_B.end());
string reverse_temp;
check ? reverse_temp=string(vec_A.begin(), vec_A.end())
: reverse_temp=string(vec_B.begin(), vec_B.end());
return stoi(reverse_temp);
}
Leave a comment