문제
두 주사위의 눈이 주어질 때, 아랍어 주사위 규칙에 따라 해당하는 이름을 출력하라.
입력
테스트 케이스 수 N, 각 케이스마다 두 주사위 눈이 주어진다.
출력
각 케이스마다 "Case #:" 형식과 함께 아랍어 이름을 출력한다. 같은 눈이면 특수 이름, 5와 6이면 "Sheesh Beesh", 그 외에는 큰 눈 이름 + 작은 눈 이름 순으로 출력한다.
예제
| 입력 | 출력 |
|---|---|
2 3 5 6 6 | Case 1: Bang Seh Case 2: Dosh |
풀이
주사위 눈에 대응하는 이름 배열을 미리 정의하고, 조건에 따라 분기한다.
- 1~6에 대응하는 일반 이름과 같은 눈일 때의 특수 이름 배열을 정의한다
- 두 눈이 같으면 특수 이름 배열에서 출력한다
- 작은 눈이 5이고 큰 눈이 6이면 "Sheesh Beesh"를 출력한다
- 그 외에는 큰 눈 이름 + 작은 눈 이름 순서로 출력한다
핵심 아이디어: 3가지 조건 분기(같은 눈, 5-6 조합, 일반)로 처리하는 매핑 문제이다.
코드
#include <bits/stdc++.h>
using namespace std;
int n, a, b;
string diceNumName[7] = {"", "Yakk", "Doh", "Seh", "Ghar", "Bang", "Sheesh"};
string sameDiceNumName[7] = {"", "Habb Yakk", "Dobara", "Dousa", "Dorgy", "Dabash", "Dosh"};
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a >> b;
cout << "Case " << i << ": ";
int small = min(a, b);
int big = max(a, b);
if (small == big)
{
cout << sameDiceNumName[small] << '\n';
continue;
}
if (small == 5 && big == 6)
{
cout << "Sheesh Beesh\n";
continue;
}
cout << diceNumName[big] << ' ' << diceNumName[small] << '\n';
}
}복잡도
- 시간: O(N) (N: 테스트 케이스 수)
- 공간: O(1)