문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
출력
첫째 줄에 상수의 대답을 출력한다.
1.
#include <iostream>
using namespace std;
int reverse(int n) {
int x, y, z;
x = n / 100;
y = n % 100 / 10;
z = n % 10;
n = z * 100 + y * 10 + x;
return n;
}
int main() {
int a, b, result;
cin >> a >> b;
a = reverse(a);
b = reverse(b);
result = a > b ? a : b;
cout << result << endl;
}
2.
#include <iostream>
using namespace std;
int reverse(int n) {
int result = 0;
while (n != 0) {
result *= 10;
result += n % 10;
n /= 10;
}
return result;
}
int main() {
int a, b, result;
cin >> a >> b;
a = reverse(a);
b = reverse(b);
result = a > b ? a : b;
cout << result << endl;
}
3.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string result;
string str1, str2;
cin >> str1 >> str2;
reverse(str1.begin(), str1.end());
reverse(str2.begin(), str2.end());
result = str1 > str2 ? str1 : str2;
cout << result;
return 0;
}
1번과 2번을 보면 funtion 안의 내용만 바뀌고, main의 내용은 똑같다.
위 두가지 방법이있는데, 일일이 바꾸는 방법이 직관적이고, 이해가 쉽지만,
while문을 사용하는법이 간편한것 같다.
입력받는 숫자가 3자리라 코드길이 차이는 얼마 안나지만, 만약 숫자의 길이가 길어지면 while을 안쓸시 위의 코드는
그에따라 더 길어지게 된다.
3번은 string으로 입력을 받은후, 내장되있는 reverse 함수를 사용하고, atoi를 통해 int로 변환해 값을 내는
방법이지만 그리 추천하지 않는다.
어차피 코드길이 차이도 별로 나지않고, 위의 식도 상당히 간편하기 때문이다.
가장 좋은 방법은 while문을 이용하는 방법이다.
꼭 숙지하면 좋을 것 같다.
'PS > 백준' 카테고리의 다른 글
백준 / Recursion(재귀) / 10872번 / 팩토리얼 / C++ (0) | 2020.09.28 |
---|---|
백준 / 그리디 알고리즘 / 11047번 / 동전 0 / C++ (0) | 2020.09.23 |
백준 / String(문자열) / 1152 / 단어의 개수 / C++ (0) | 2020.05.28 |
백준 / String(문자열) / 1157번 / 단어 공부 / C++ (0) | 2020.05.27 |