문제
A와 B가 10라운드에 걸쳐 카드를 낸다. 큰 수를 낸 쪽이 3점, 같으면 각 1점을 얻는다. 최종 점수와 승자를 출력하라. 동점이면 마지막으로 이긴 사람이 승자이며, 모든 라운드가 무승부면 D를 출력한다.
입력
첫째 줄에 A의 카드 10개, 둘째 줄에 B의 카드 10개가 주어진다.
출력
첫째 줄에 A와 B의 점수, 둘째 줄에 승자(A, B, D)를 출력한다.
예제
| 입력 | 출력 |
|---|---|
5 8 7 9 4 1 3 6 2 10 4 3 2 1 0 5 6 9 8 7 | 게임 결과에 따라 출력 |
풀이
10라운드를 순회하며 점수를 누적하고, 마지막 승리자를 추적한다.
- 각 라운드에서 A와 B의 카드를 비교한다
- 같으면 양쪽 1점씩, 다르면 큰 쪽에 3점을 부여하고 마지막 승리자를 갱신한다
- 총점이 다르면 점수가 높은 쪽이 승자이다
- 총점이 같으면 마지막 승리자가 최종 승자이며, 승리한 라운드가 없으면 D를 출력한다
핵심 아이디어: 동점일 때 마지막 승리 라운드가 결정하므로, 순회하며 마지막 승리자를 갱신하는 방식으로 한 번의 순회에 해결한다.
코드
#include <iostream>
using namespace std;
int a[10], b[10], as, bs;
char l = 'D';
int main()
{
for (int &i : a)
cin >> i;
for (int &i : b)
cin >> i;
for (int i = 0; i < 10; ++i)
a[i] == b[i] ? ++as, ++bs : a[i] > b[i] ? (as += 3, l = 'A')
: (bs += 3, l = 'B');
cout << as << " " << bs << "\n"
<< (as == bs ? l : as > bs ? 'A'
: 'B');
}복잡도
- 시간: O(1) (고정 10라운드)
- 공간: O(1)