[백준 15179] Golf Croquet (C#, C++) - soo:bak
작성일 :
문제 링크
설명
샷 결과가 S/H/D/O로 주어질 때, 두 팀의 득점을 계산해 현재 스코어와 승패 상황을 출력하는 문제입니다.
접근법
샷 순서는 파랑, 빨강, 검정, 노랑 순으로 반복되며, 파랑과 검정은 팀1, 빨강과 노랑은 팀2입니다.
H는 자기 팀 1점, D는 자기 팀 최대 2점, O는 상대 팀 1점입니다. 단, 7점을 초과할 수 없으므로 6점일 때 D를 쳐도 1점만 추가됩니다.
어느 팀이든 7점에 도달하면 경기가 끝나고, 최종 점수를 비교해 승패 상황을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
class Program {
static void AddScore(int[] sc, int t, int delta) {
if (sc[t] >= 7) return;
var add = Math.Min(delta, 7 - sc[t]);
sc[t] += add;
}
static void Main() {
var team1 = Console.ReadLine()!;
var team2 = Console.ReadLine()!;
var s = int.Parse(Console.ReadLine()!);
var shots = Console.ReadLine()!;
var sc = new int[2];
for (int i = 0; i < s; i++) {
if (sc[0] == 7 || sc[1] == 7) break;
int t = (i % 4 == 0 || i % 4 == 2) ? 0 : 1;
switch (shots[i]) {
case 'H': AddScore(sc, t, 1); break;
case 'D': AddScore(sc, t, 2); break;
case 'O': AddScore(sc, 1 - t, 1); break;
default: break;
}
}
Console.Write($"{team1} {sc[0]} {team2} {sc[1]}. ");
if (sc[0] == 7) Console.WriteLine($"{team1} has won.");
else if (sc[1] == 7) Console.WriteLine($"{team2} has won.");
else if (sc[0] > sc[1]) Console.WriteLine($"{team1} is winning.");
else if (sc[0] < sc[1]) Console.WriteLine($"{team2} is winning.");
else Console.WriteLine("All square.");
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <bits/stdc++.h>
using namespace std;
void addScore(int& cur, int delta) {
if (cur >= 7) return;
cur += min(delta, 7 - cur);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string team1, team2;
getline(cin, team1);
getline(cin, team2);
int s; cin >> s;
string shots; cin >> shots;
int sc1 = 0, sc2 = 0;
for (int i = 0; i < s; i++) {
if (sc1 == 7 || sc2 == 7) break;
int t = (i % 4 == 0 || i % 4 == 2) ? 0 : 1;
char c = shots[i];
if (c == 'H') {
if (t == 0) addScore(sc1, 1);
else addScore(sc2, 1);
} else if (c == 'D') {
if (t == 0) addScore(sc1, 2);
else addScore(sc2, 2);
} else if (c == 'O') {
if (t == 0) addScore(sc2, 1);
else addScore(sc1, 1);
}
}
cout << team1 << " " << sc1 << " " << team2 << " " << sc2 << ". ";
if (sc1 == 7) cout << team1 << " has won.\n";
else if (sc2 == 7) cout << team2 << " has won.\n";
else if (sc1 > sc2) cout << team1 << " is winning.\n";
else if (sc1 < sc2) cout << team2 << " is winning.\n";
else cout << "All square.\n";
return 0;
}