1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
if (a == b && b == c) {
// 세 개의 주사위 눈이 모두 같을 때
cout << 10000 + (a * 1000);
} else if (a == b || a == c) {
// 두 개의 주사위 눈이 같을 때 (a와 b 또는 a와 c가 같을 때)
cout << 1000 + (a * 100);
} else if (b == c) {
// 두 개의 주사위 눈이 같을 때 (b와 c가 같을 때)
cout << 1000 + (b * 100);
} else {
// 모두 다른 경우
cout << max(a, max(b, c)) * 100;
}
return 0;
}
처음 제출한 코드는 이러했다
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a==b==c){
cout<<10000+(a*1000);
}else if(a!=b!=c){
cout<<max(a,b,c)*100;
}else{
if(a==b){
cout<<1000+(a*100);
}else if(a==c){
cout<<1000+(c*100);
}else if(b==c){
cout<<1000+(b*100);
}else{return 0;}
}
return 0;
}
제일 단순한 경우인 모두 같은 경우/ 모두 다른 경우를 먼저 정의해주고 하면 더 짧지 않을까 ?생각했다.
...
여기서 잠깐
수정해줬음에도 처음엔 틀렸다. 왜일까?
- a==b && b==c 인 경우는 a,b,c가 모두 동일함이 맞다
그러나...- a!=b && b!=c는 a,b,c가 모두 다른 경우라고 하기 어렵다
a==c인 경우가 있을 수 있기 때문!- 따라서 a!=b && b!=c && a!=c라고 해줘야 오류가 발생하지 않는데.. 여기서부터 복잡해짐이 느껴졌다.
추가적으로 문법적 오류가 났던 부분
max는 인수를 2개만 가지는 함수이다!
따라서 max(a,max(b,c) 라고 작성해야한다.
이러한 과정 끝에 나온 나의 코드,,,
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
if(a==b && b==c ){
cout<<10000+(a*1000);
}else if(a!=b && b!=c && a!=c){
cout<<max(a,max(b,c))*100;
}else{
if(a==b){
cout<<1000+(a*100);
}else if(a==c){
cout<<1000+(c*100);
}else if(b==c){
cout<<1000+(b*100);
}else{return 0;}
}
return 0;
}
결국에는 하나하나 다 비교하는 코드로 뭔가 마음에 들지 않는다..
다시 정답 코드로 돌아가보자
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
if (a == b && b == c) {
// 세 개의 주사위 눈이 모두 같을 때
cout << 10000 + (a * 1000);
} else if (a == b || a == c) {
// 두 개의 주사위 눈이 같을 때 (a와 b 또는 a와 c가 같을 때)
cout << 1000 + (a * 100);
} else if (b == c) {
// 두 개의 주사위 눈이 같을 때 (b와 c가 같을 때)
cout << 1000 + (b * 100);
} else {
// 모두 다른 경우
cout << max(a, max(b, c)) * 100;
}
return 0;
}
- a=b 또는 a=c인 경우는 결과 함수를 한 줄로 묶어줄 수 있다.
- 처음에 모두 같은 경우, 다음에 두 개가 같은 경우를 먼저 해줬더니 3개 모두 다른 경우는 그냥 예외 처리가 가능하다.
어떤 경우가 가장 효율적인 경우인지 항상 고심하자!