[백준 27161] 크레이지 타임 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
각 카드에 대해 외쳐야 하는 시각과 손바닥을 쳐야 하는지를 출력하는 문제입니다.
시각은 1부터 시작해 방향에 따라 1씩 증감하며, 1~12 범위를 순환합니다.
모래시계 카드는 방향을 반전시키고, 카드 시각이 현재 시각과 같으면 손바닥을 칩니다.
단, 두 조건이 동시에 성립하면 과부하로 아무 규칙도 적용하지 않습니다.
접근법
현재 시각과 진행 방향을 유지하며 시뮬레이션합니다.
각 카드마다 모래시계인지, 시각이 일치하는지 확인합니다.
둘 다 해당하면 무시하고, 하나만 해당하면 해당 규칙을 적용합니다.
출력 후 방향에 따라 시각을 증가 또는 감소시키며, 12 다음은 1로, 1 이전은 12로 순환합니다.
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
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var cur = 1;
var dir = 1;
for (var i = 0; i < n; i++) {
var line = Console.ReadLine()!.Split();
var kind = line[0];
var x = int.Parse(line[1]);
var hourglass = kind[0] == 'H';
var sync = cur == x;
var action = "NO";
if (hourglass && sync) { }
else if (hourglass) dir *= -1;
else if (sync) action = "YES";
Console.WriteLine($"{cur} {action}");
cur += dir;
if (cur == 13) cur = 1;
if (cur == 0) cur = 12;
}
}
}
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 n;
if (!(cin >> n)) return 0;
int cur = 1;
int dir = 1;
for (int i = 0; i < n; i++) {
string s; int x;
cin >> s >> x;
bool hourglass = (s[0] == 'H');
bool sync = (cur == x);
string action = "NO";
if (hourglass && sync) { }
else if (hourglass) dir *= -1;
else if (sync) action = "YES";
cout << cur << " " << action << "\n";
cur += dir;
if (cur == 13) cur = 1;
if (cur == 0) cur = 12;
}
return 0;
}