작성일 :

문제 링크

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;
}