문제
예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수 중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
💡 입력 조건 중요
! 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다. !
풀이
어렵지는 않은 문제인데, 풀이 방법이 많아서 각 풀이를 기록해보려한다.
풀이 1. string으로 받은 수를 거꾸로한 정수(int) 만들어 비교
풀이 2. string으로 받은 수를 맨 뒷자리부터 한 자리씩 비교
풀이 3. string으로 받은 수를 거꾸로한 string을 만들어 max() 함수
로 비교
풀이 4. string으로 받은 수를 문자열을 뒤집는 reverse() 함수
로 뒤집어 문자열 비교
풀이 코드
풀이 1. string으로 받은 수를 거꾸로한 정수(int) 만들어 비교
#include<iostream>
#include<string>
using namespace std;
int main(void){
cin.tie(NULL); ios_base::sync_with_stdio(false);
string a, b;
int na=0, nb=0;
cin>>a>>b;
na+=(a[2]-'0')*100; nb+=(b[2]-'0')*100;
na+=(a[1]-'0')*10; nb+=(b[1]-'0')*10;
na+=(a[0]-'0'); nb+=(b[0]-'0');
if(na>nb) cout<<na;
else cout<<nb;
return 0;
}
입력이 세 자리 수로 고정되어 있어서 가능한 풀이
풀이 2. string으로 받은 수를 맨 뒷자리부터 한 자리씩 비교
#include<iostream>
#include<string>
using namespace std;
int main(void){
cin.tie(NULL); ios_base::sync_with_stdio(false);
string a, b;
cin>>a>>b;
for(int i=2;i>=0;i--)
{
if(a[i]>b[i])
{
cout<<a[2]<<a[1]<<a[0];
break;
}
else if(a[i]<b[i])
{
cout<<b[2]<<b[1]<<b[0];
break;
}
}
return 0;
}
정수로 바꾸는 과정없이 수행할 수 있는 코드. 어차피 입력은 세 자리 수로 고정되어있고, 두 수가 같지 않으므로 맨 뒷자리 수 부터 인덱스로 접근해 문자 자체로 비교해도 되므로 큰 수를 찾아내는 방법!
풀이 3. string으로 받은 수를 거꾸로한 string을 만들어 max() 함수
로 비교
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void){
cin.tie(NULL); ios_base::sync_with_stdio(false);
string a, b, na, nb;
cin>>a>>b;
for(int i=2;i>=0;i--)
{
na+=a[i];
nb+=b[i];
}
cout<<max(na,nb);
return 0;
}
<algorithm>
헤더 파일에 들어있는 max()
함수!
max(num1, num2)
중에 더 큰 수(max)를 반환min(num1, num2)
중에 더 작은 수(min)를 반환+) 사실 max() 안쓰고 그냥 na>nb 비교해도 된다. (string에 비교 연산자를 쓰면 사전적 순서에 따라 크기를 비교한다)
na+=a[i];
nb+=b[i];
풀이 4. string으로 받은 수를 문자열을 뒤집는 reverse() 함수
로 뒤집어 문자열 비교
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void){
cin.tie(NULL); ios_base::sync_with_stdio(false);
string a, b, na, nb;
cin>>a>>b;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
if(a>b) cout<<a;
else cout<<b;
return 0;
}
reverse()
에 대해서 다음 글에 자세히 포스팅하겠다. 참고로 헤더는 <algorithm>