-
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%2014503
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 처음의 문제를 보고 BFS로 하면 되겠다 생각해서 BFS로 문제를 풀고 나서
테케를 돌렸더니 두 번째 테케에서 59가 나왔다 정답은 57인데 그래서 고민을 하고 문제를 읽어보던 중
네 방향 모두 청소 되어있거나 벽인 경우에는 바라보는 방향을 유지한 채로 한 칸 후진을 하고 2번으로 돌아간다
라는 조건이 있었다, 해당 조건을 잘 케치하고 문제를 풀어야 한다.
먼저 해당 문제는 로봇청소기가 청소하는 방 개수를 구하는 문젠데.
조건이 주어지는데 조건을 잘 파악해서 문제를 풀어야 한다.
dfs를 이용해서 문제를 해결했고 해당 문제에서 중요한 점은 dfs는 탐색을 할 곳이 없으면 원래 자리로 돌아왔지만
해당 문제는 원래 자리로 돌아오는 게 아닌 1칸 후진하는 것에 중점을 두어야 한다.
1. 해당 공간을 청소한다 map[y][x] = 2;
2. 해당 공간으로부터 왼쪽 방향부터 확인 및 청소 dfs 실행 여기서 dfs 호출하면 return 문 실행해 줘야지 원래 자리로 안 돌아감.
3. 만약 해당 dfs에서 return 문에 빠지지 않고 아래로 내려왔으면 4방향 모두 청소했거나 벽이거나 한 경우라
뒤로 후진해야 함
4. 방향을 +2 or -2 해서 후진을 진행 여기서 주의할 점이 후진은 하는데 바라보는 방향은 유지!
위의 순서대로 코드를 짜면 문제없이 해결 가능하다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 11286 절댓값 힙 JAVA (0) 2021.11.12 Baekjoon 5525 IOIOI JAVA (0) 2021.11.12 Baekjoon 11403 경로 찾기 JAVA (0) 2021.11.12 Baekjoon 1389 케빈 베이컨의 6단계 법칙 JAVA (0) 2021.11.12 Baekjoon 11053 가장 긴 증가하는 부분 수열 JAVA (0) 2021.11.12 댓글