2667번: 단지번호붙이기(BOJ C/C++)
사용 언어: C++
문제
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.
- 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
- 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
- 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.
3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.
입력
첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.
출력
첫째 줄에 게임의 상금을 출력 한다.
첫 번째 풀이
사실 두 번째 풀이를 보면 이 풀이가 조금 쪽팔리긴 한데... 일단 내가 이 문제를 보고 그냥 아무 생각없이 풀려고 할때 이런 방향으로 접근을 했으므로... 반성을 하는 취지에서 올려본다. 두 번째 풀이에서는 getmax() 함수 대신 그냥 알고리즘 헤더에 있는 max() 함수를 사용해서 더 간단해보이긴 하지만, 실제로도 훨씬 간단하게 풀었다.
#include <bits/stdc++.h>
using namespace std;
int getmax(int& n1, int& n2, int& n3)
{
if((n1 >= n2) && (n1 >= n3))
return n1;
else if ((n2 >= n1) && (n2 >= n3))
return n2;
return n3;
}
int getsame(int& n1, int& n2, int& n3)
{
if(n1==n2 && n1!=n3 && n2!=n3)
return n1;
if(n1==n3 && n2!=n3 && n1!=n2)
return n1;
if(n2==n3 && n1!=n2 && n1!=n3)
return n2;
return 0;
}
int solution(int& n1, int& n2, int& n3)
{
int cnt,max,same;
if(n1==n2)
cnt++;
if(n1==n3)
cnt++;
if(n2==n3)
cnt++;
switch(cnt)
{
case 0:
max=getmax(n1,n2,n3);
return max*100;
case 1:
same=getsame(n1,n2,n3);
return 1000+same*100;
case 3:
return 10000+n1*1000;
}
return 0;
}
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
int a,b,c;
cin>>a>>b>>c;
cout<<solution(a,b,c)<<'\n';
return 0;
}
두 번째 풀이
바킹독님의 풀이다. 한 눈에 봐도 풀이 1 보다 훨씬 간단해보인다. 이유는 위에서 말했듯이 max()함수를 사용했고, 두 수가 같을 때를 저렇게 아주 간단하게 표현할 수 있기 때문이다. 그리고 switch case도 굳이 안 써도 됐지만 그냥 쓰고 싶어서 풀이 1이 훨씬 길어보이긴 한다.
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
ios::sync_with_stdio(0);
cin.tie(0);
int a,b,c;
cin>>a>>b>>c;
//세 수 다 같으면
if(a==b && b==c)
cout<<10000+a*1000;
//두 수만 같으면
else if(a==b || a==c)
cout<<1000+a*100;
else if(b==c)
cout<<1000+b*100;
//다 다르면
else
cout<<max({a,b,c})*100;
return 0;
}
느낀 점
이렇게 다른 사람과의 풀이와 비교해가면서 다른 문제를 풀때 더 효율적으로 풀 수 있게 노력하는 것이므로, 코드를 겁나 무식하고 좀 아쉽게 구현해도 잘 습득해가면서 공부하자. 그리고, math()함수 같은 것 (STL에 있는 헤더들의 함수들)을 사용하는 풀이를 보고 싶어서 다른 사람들의 풀이를 자주 볼 것이므로 내 구현이 못나고 복잡해보여도 기죽지 말자..!!
'BOJ' 카테고리의 다른 글
18870번: 좌표 압축 (0) | 2024.09.26 |
---|---|
10816번: 숫자 카드 2 (0) | 2022.02.04 |
1929번: 소수 구하기 (0) | 2022.01.27 |
2752번: 세수정렬 (0) | 2022.01.12 |
2443번: 별 찍기 - 6 (0) | 2022.01.12 |