본문 바로가기
Algorithm/Programmers

[2020 카카오 기출] 블록 이동하기(JAVA)

by BAYABA 2021. 6. 20.

https://programmers.co.kr/learn/courses/30/lessons/60063


시뮬레이션 문제입니다.

크게 두 가지가 중요합니다.

 

1. 로봇의 상태를 나타내는 법

로봇의 상태는 현재좌표(Y,X) + 바라보고 있는 방향(Direction)으로 나타낼 수 있습니다.

두 칸을 각 각 HEAD, TAIL이라고 하고 HEAD 기준으로 바라보는 방향으로 TAIL 위치를 구할 수 있습니다.

//int값 X의 의미: X초에 로봇이 (y,x) 좌표에서 dir 방향으로 있었음을 의미
int robotState[DIR][N][N];

 

2. 매 초 이동하는방법

매 초마다 로봇이 이동할 수 있는 방법은 8가지입니다.

 

case1. 회전하지 않고 주어진 방향에서 좌우상하로 4방향 이동하는 경우 - 4가지

case2. HEAD을 회전 축으로 좌우 90도로 회전하는 방법 - 2가지

case3. TAIL를 회전 축으로 좌우 90도 회전하는 방법 - 2가지

 

그래서 매 초 마다 로봇이 위치했던 상태를 저장하면서

8가지 경우의 수로 탐색을 하면 정답을 구할 수 있습니다.