[백준 29267] Случай с игрой (C#, C++) - soo:bak
작성일 :
문제 링크
설명
세이브/로드, 탄약 획득, 발사 동작이 순서대로 주어질 때마다 현재 탄환 수를 출력하는 문제입니다.
접근법
현재 탄약 수와 마지막 저장값을 관리합니다.
save는 현재 탄약을 저장하고, load는 저장된 값을 불러옵니다. 저장한 적이 없으면 0으로 초기화됩니다. ammo는 탄약을 추가하고, shoot는 탄약을 1 소모합니다.
매 동작 후 현재 탄약 수를 출력합니다.
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
using System;
class Program {
static void Main() {
var first = Console.ReadLine()!.Split();
var n = int.Parse(first[0]);
var k = int.Parse(first[1]);
var cur = 0;
var saved = 0;
var hasSave = false;
for (var i = 0; i < n; i++) {
var cmd = Console.ReadLine()!;
switch (cmd) {
case "save":
saved = cur;
hasSave = true;
break;
case "load":
cur = hasSave ? saved : 0;
break;
case "shoot":
cur--;
break;
case "ammo":
cur += k;
break;
}
Console.WriteLine(cur);
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k; cin >> n >> k;
int cur = 0, saved = 0;
bool hasSave = false;
for (int i = 0; i < n; i++) {
string cmd; cin >> cmd;
if (cmd == "save") {
saved = cur;
hasSave = true;
} else if (cmd == "load") cur = hasSave ? saved : 0;
else if (cmd == "shoot") cur--;
else if (cmd == "ammo") cur += k;
cout << cur << "\n";
}
return 0;
}