삼성 SW 역량 테스트 기출 문제

https://www.acmicpc.net/problem/14503

 

14503번: 로봇 청소기

로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음

www.acmicpc.net



Solution

 

문제 유형 : 시뮬레이션

 

구현해야 할 것

  • 로봇청소기의 방향을 보고있는 방향의 왼쪽으로 회전
  • 네 방향 다 막혀있을 때 한 칸 후진

사실 문제에서 주어진 로직들을 그대로 구현하면 되는 문제였다. 말은 쉽지만 나도 동서남북 방향 설정하는 것에 익숙치 않았기 때문에 쉽지만은 않았다. dx와 dy에 북동남서에 맞는 좌표를 차례대로 설정해준다. 그리고 robotCleaner를 네 방향이 막혀있고 후진도 못할 때 까지 반복한다.

 

# 1. 에서 현재 좌표가 청소를 안한 상태(0)면 청소를 해준다(-1).

# 2. 그리고 turn 함수를 통해 방향을 왼쪽으로 바꿔준다(turn 함수는 dx와 dy 배열가 인덱스로 북동남서의 방향을 정하기 때문에 인덱스만 리턴해준다.)

# 2.a 회전한 방향의 좌표를 저장하고, 청소를 안했으면 변수 값을 회전한 곳의 좌표와 방향으로 갱신해준다.

# 2.b 청소를 한 상태거나 벽이면 현재 좌표와 회전한 방향, 그리고 막혀있다는 의미로 cnt값에 1을 더해서 갱신한다(cnt 값이 4이면 네 방향 다 막혀있는 상태)

# 2.c cnt 값이 4이면 네 방향이 다 막혀있는 상태이므로, 후진을 해야한다. 후진을 할 때는 현재 가리키는 방향이 북이면 남으로, 동이면 서 이런 식으로 반대 방향으로 가기 때문에 인덱스를 (d+2) % 4 과 같이 설정하면 반대 방향을 가리키게 된다. 후진하는 방향의 상태가 청소를 한 상태면, 후진을 할 수 있기 때문에 방향은 그대로, 후진한 좌표와 cnt값을 0으로 초기화 해서 변수를 갱신한다.

# 2.d 후진 방향이 벽이면 현재 maps에서 -1(청소한 영역)의 개수를 리턴한다.

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준/Python] 3190번 뱀  (0) 2020.08.09
[백준/Python] 16236번 아기 상어  (0) 2020.06.29
[백준/Python] 2178번 미로 탐색  (0) 2020.04.19
[백준/Python] 1260번 DFS와 BFS  (0) 2020.04.19
[백준/Python] 1012번 유기농배추  (0) 2020.04.18

생강강

,