-
백준 14503번 로봇 청소기 -Java문제풀이/BOJ 2020. 12. 19. 20:32
문제 링크입니다.
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
문제 분석 :
현재 위치를 청소하고 왼쪽 방향으로 이동하는 로봇 청소기의 구현으로
왼쪽 방향으로 이동을 하면서 청소할 수 있는 칸의 최대 값을 구하는 문제이다.
문제 접근 :
1. 현재 위치를 청소
2. 현재 위치에서 현재 방향을 기준으로 왼쪽 방향으로 탐색 진행
2.1. 왼쪽 칸이 청소되어 있지 않다면 왼쪽 방향으로 회전 후 한 칸 전진 쉽게 말해 왼쪽으로 한 칸 이동하고 1번으로 돌아간다.
2.2. 왼쪽 칸이 청소가 되어있거나, 벽인 경우 왼쪽으로 회전 한 뒤 2번으로 돌아간다.
2.3. 네 방향 모두 청소가 되어있거나, 벽인 경우 현재 바라보는 방향을 유지한 채 뒤로 한칸 이동한 뒤 2번으로돌아간다.
2.4. 네 방향 모두 청소가 되어있거나, 벽이면서 후진할 수 없는 상태 ( 후진 할 공간이 벽인 경우 )라면 종료한다.
방향 배열
dx[] ={-1,0,1,0}
dy[] ={0,1,0,-1}
위 배열로 상, 우, 하, 좌 방향을 설정했으며
왼쪽으로 이동 = (현재위치 + 3)%4
뒤쪽으로 이동 = (현재위치 +2)%4
이처럼 조건에 맞게 왼쪽으로 이동을 하되, 청소할 공간이 없다면 후진, 후진할 곳이 없다면 반복을 종료하고
배열의 청소된 칸을 찾으면 된다.
소스 코드 :
'문제풀이 > BOJ' 카테고리의 다른 글
백준 12100번 2048(Easy) -Java (0) 2020.12.19