[백준 21614] Secret Instructions (C#, C++) - soo:bak
작성일 :
문제 링크
설명
다섯 자리 코드에서 방향 규칙을 해석해 좌우와 이동 칸수를 출력하는 문제입니다.
접근법
다섯 자리 코드에서 앞 두 자릿수의 합이 홀수이면 왼쪽, 짝수이면 오른쪽으로 회전합니다. 다만 합이 0인 경우는 이전 지시어의 방향을 그대로 따릅니다. 뒤 세 자릿수는 이동할 칸수입니다.
종료 코드 99999가 나올 때까지 지시어를 하나씩 읽으면서 방향과 칸수를 출력합니다.
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
using System;
class Program {
static void Main() {
var prevDir = "";
while (true) {
var s = Console.ReadLine();
if (s == null || s == "99999") break;
var d1 = s[0] - '0';
var d2 = s[1] - '0';
var sum = d1 + d2;
var dir = "";
if (sum == 0) dir = prevDir;
else if ((sum & 1) == 1) dir = "left";
else dir = "right";
prevDir = dir;
var steps = int.Parse(s.Substring(2));
Console.WriteLine($"{dir} {steps}");
}
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s, prevDir;
while (cin >> s) {
if (s == "99999") break;
int d1 = s[0] - '0';
int d2 = s[1] - '0';
int sum = d1 + d2;
string dir;
if (sum == 0) dir = prevDir;
else if (sum % 2 == 1) dir = "left";
else dir = "right";
prevDir = dir;
int steps = stoi(s.substr(2));
cout << dir << ' ' << steps << '\n';
}
return 0;
}