[백준 30642] 아이그루스와 화장실 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
건물의 홀수 층은 큰 동물, 짝수 층은 작은 동물 전용 화장실입니다. 특정 마스코트가 현재 층에서 자신의 몸집에 맞는 가장 가까운 화장실 층을 찾는 문제입니다.
접근법
마스코트 이름으로 필요한 화장실의 홀짝 여부를 결정합니다. 안뇽이는 홀수 층, 나머지는 짝수 층이 필요합니다.
현재 층에서 거리를 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
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var who = Console.ReadLine()!;
var k = int.Parse(Console.ReadLine()!);
var needOdd = who == "annyong";
for (var d = 0; ; d++) {
var down = k - d;
var up = k + d;
if (down >= 1 && (down % 2 == (needOdd ? 1 : 0))) {
Console.WriteLine(down);
break;
}
if (up <= n && (up % 2 == (needOdd ? 1 : 0))) {
Console.WriteLine(up);
break;
}
}
}
}
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);
int n; cin >> n;
string who; cin >> who;
int k; cin >> k;
bool needOdd = (who == "annyong");
for (int d = 0;; d++) {
int down = k - d;
int up = k + d;
if (down >= 1 && (down % 2 == (needOdd ? 1 : 0))) {
cout << down << "\n";
break;
}
if (up <= n && (up % 2 == (needOdd ? 1 : 0))) {
cout << up << "\n";
break;
}
}
return 0;
}