[백준 30569] Last One Standing (C#, C++) - soo:bak
작성일 :
문제 링크
설명
문제의 목표는 두 플레이어가 각각 하나의 유닛을 컨트롤하여 게임에서 싸우는 시나리오를 시뮬레이션 하는 것입니다.
각 유닛은 건강(h)
, 피해랑(d)
, 재장전 시간(t)
을 속성으로 가지고 있습니다.
또한, 미사일이 발사된 후 0.5
초가 지나야 상대방 유닛의 건강이 감소하며,
같은 유닛이 연속해서 미사일을 발사할 수 있는 최소 시간 간격은 t
초여야 한다는 규칙이 존재합니다.
- 각 유닛의
다음 발사 가능 시간
, 그리고현재 시간
을0
으로 초기화 합니다.
- 두 유닛의 건강이 모두
0
보다 클 동안, 즉, 두 유닛이 모두 파괴되지 않은 상태에서 게임을 시뮬레이션 합니다.
- 각 유닛에 대해,
현재 시간
이 해당 유닛의다음 발사 가능 시간
보다 크거나 같다면,
유닛은 미사일을 발사하고, 상대방의건강
을피해량
만큼 감소시킵니다.
- 또한, 해당 유닛의
다음 발사 가능 시간
을현재시간
+재장전 시간
으로 갱신합니다.
- 이후, 현재 시간을
0.5
초 씩 증가시킵니다.
시뮬레이션을 진행하면서, 만약, 한 플레이어의 유닛만 건강이 0
이하가 된 경우,
해당 유닛을 컨트롤하는 플레이어가 패배합니다.
두 유닛이 동시에 파괴되었다면, 게임은 무승부로 끝납니다.
게임의 종료 결과에 따라서, 문제에서 요구하는 문자열을 출력합니다.
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
namespace Solution {
class Program {
static void Main(string[] args) {
var input = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
int h1 = input[0], d1 = input[1], t1 = input[2];
input = Console.ReadLine()!.Split(' ').Select(int.Parse).ToArray();
int h2 = input[0], d2 = input[1], t2 = input[2];
double nextFire_1 = 0, nextFire_2 = 0;
double time = 0;
while(h1 > 0 && h2 > 0) {
if (time >= nextFire_1) {
nextFire_1 = time + t1;
h2 -= d1;
}
if (time >= nextFire_2) {
nextFire_2 = time + t2;
h1 -= d2;
}
time += 0.5;
}
if (h1 > 0) Console.WriteLine("player one");
else if (h2 > 0) Console.WriteLine("player two");
else Console.WriteLine("draw");
}
}
}
[ 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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int h1, d1, t1, h2, d2, t2;
cin >> h1 >> d1 >> t1 >> h2 >> d2 >> t2;
double nextFire1 = 0, nextFire2 = 0;
double time = 0;
while (h1 > 0 && h2 > 0) {
if (time >= nextFire1) {
nextFire1 = time + t1;
h2 -= d1;
}
if (time >= nextFire2) {
nextFire2 = time + t2;
h1 -= d2;
}
time += 0.5;
}
if (h1 > 0) cout << "player one\n";
else if (h2 > 0) cout << "player two\n";
else cout << "draw\n";
return 0;
}