[백준 29823] Pakirobot Manhattanis (C#, C++) - soo:bak
작성일 :
문제 링크
29823번 - Pakirobot Manhattanis
설명
로봇의 이동 기록이 주어질 때, 현재 위치에서 원점까지 돌아가는 최소 걸음 수를 구하는 문제입니다.
N, E, S, W는 각각 북, 동, 남, 서로 한 칸 이동을 의미합니다.
접근법
이동을 누적하여 현재 좌표를 구합니다. 동쪽이면 x를 증가, 서쪽이면 감소시키고, 북쪽이면 y를 증가, 남쪽이면 감소시킵니다.
원점까지의 최소 걸음 수는 맨해튼 거리, 즉 |x| + |y|입니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var s = Console.ReadLine()!;
var x = 0;
var y = 0;
foreach (var c in s) {
if (c == 'E') x++;
else if (c == 'W') x--;
else if (c == 'N') y++;
else if (c == 'S') y--;
}
Console.WriteLine(Math.Abs(x) + Math.Abs(y));
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; cin >> n;
string s; cin >> s;
int x = 0, y = 0;
for (char c : s) {
if (c == 'E') x++;
else if (c == 'W') x--;
else if (c == 'N') y++;
else if (c == 'S') y--;
}
cout << abs(x) + abs(y) << "\n";
return 0;
}