본문 바로가기
알고리즘/백준

[백준 2174] 로봇 시뮬레이션 (C++)

by Bloofer 2020. 10. 8.

A. 문제설명

www.acmicpc.net/problem/2174

 

2174번: 로봇 시뮬레이션

첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순

www.acmicpc.net

문제에 대한 자세한 설명은 링크 참조

 

1. 가로 A, 세로 B 크기의 아래와 같은 땅이 존재

2. N개의 로봇의 초기위치 x, y 그리고 현재 바라보는 방향이 각각 주어짐

3. 그리고 M번의 명령이 주어지는데, 각각 해당 명령을 수행하는 로봇의 번호, 명령의 종류, 반복 횟수가 주어짐

4. 여기서 명령의 종류는 아래와 같음

  • L: 로봇이 향하고 있는 방향을 기준으로 왼쪽으로 90도 회전한다.
  • R: 로봇이 향하고 있는 방향을 기준으로 오른쪽으로 90도 회전한다.
  • F: 로봇이 향하고 있는 방향을 기준으로 앞으로 한 칸 움직인다.

5. 이러한 명령을 수행하는 중간에 벽을 만나거나 다른 로봇을 만나면 메세지 출력 및 종료

6. 아무런 충돌없이 모든 명령을 수행하면 OK 출력

 

B. 접근법

시뮬레이션

 

간단한 배열 탐사 시뮬레이션 문제이다. 이상하게 배열을 뒤집어놔서 헷갈렸지만 구현상에서 어려울 것은 전혀 없다.

맨 처음 문제 독해와 그림 설명을 좀 더 꼼꼼하게 읽을 것

 

C. 풀이

1. 각 명령을 순차적 입력에 따라 수행

2. L/R인 경우 각각 해당 로봇의 방향을 좌/우로 90도씩 회전

3. F인 경우 다음 위치로 이동 후, 다음 위치가 벽이거나 로봇이 있는 경우 메세지 출력 후 종료

4. 모든 명령 수행 후에도 아무런 충돌이 없을 시 OK 출력

 

D. 내 코드