

두 개의 수를 입력받고, 역순으로 바꿔서 둘 중 더큰 숫자를 출력하는 문제이다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s1, s2;
cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
int a = stoi(s1);
int b = stoi(s2);
cout << max (a,b);
return 0;
}
reverse(s.begin(), s.end())를 사용하기위해 두 숫자를 공백 기준으로 string으로 입력 받았다.
이후 reverse()를 각각 취해주고 stoi()로 int로 변환한 다음에 max(a,b)로 비교해주었다.
#include <iostream>
using namespace std;
string A, B, AA, BB;
int main() {
cin >> A >> B; //입력
for(int i=2;i>=0;i--) { //역으로 저장
AA += A[i];
BB += B[i];
}
cout << max(AA,BB); //둘 중 큰 값 출력
}
출처: https://tooo1.tistory.com/320 [개발자 퉁이리:티스토리]
위와 같이 reverse를 쓰지않고 직접 + 연산을 사용해 역순으로 새로운 string을 만들고, max로 비교하는 풀이이다.
인상적인것은 나는 stoi()로 string을 int로 변환해준다음 비교를 수행했는데, 위의 코드에서는 그냥 string을 max(a,b)에 인자로 그대로 전달한다.
알아보니 max(a,b)의 인자는 a,b의 타입만 같으면 정수형이든,실수형이든,문자열이든 관계가 없다.
다만, 정수,실수면 수의 크기로 비교하지만 문자열의 경우 index 0 부터 끝까지 사전식으로 비교를 수행한다.
사실 사전식 비교에 이슈가 존재하긴한다.
만약 91, 144 와 같이 두 수의 자릿수가 다르다면, max()는 사전식 비교에 의해 91을 출력해버린다.
그러나 위의 문제는 테스트케이스가 모두 세자리 수 라는 조건이 있기때문에 위와 같이 max()에 string을 그대로 전달하여 사전식 비교를 수행해도 옳은 결과가 나온다.
다른 사람의 코드를 보며 계속해서 부족한 지식을 메꾸자.