문제 링크
1600번: 말이 되고픈 원숭이
첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있
www.acmicpc.net
카테고리
BFS, 아이디어
문제 풀이
1. BFS 탐색을 통해 원숭이가 도착점에 도달하는지 판단한다.
2. 이를 위해 방문 배열을 설정한다.
2.1 boardVisit[x][y][move] : (x,y) 지점에 move만큼 이동횟수가 남은 채로 온 적이 있다.
3. 12가지 경우의 수를 이용해 원숭이의 다음 위치를 계산해 큐에 넣는다.
3.1 (0~3 : 상하좌우, 4~11 말처럼 이동) - dx[12], dy[12]
3.2 남은 이동 횟수가 0이라면 말처럼 이동하지 않는다.
3.3 만약에 방문한 곳이 해당 이동 횟수를 통해 이미 방문한 곳이 아닐때만 큐에 넣어준다.
4. 도착점에 도달하면 현재 이동한 횟수를 출력한다.
5. 큐가 빌 동안 도달하지 못한다면 -1을 출력한다.
주의할 점
* 방문 배열 처리 때문에 애먹었던 문제이다. 단순히 다시 방문하지 않게만 처리 하면 틀린다.
(이렇게 하면 경우의 수가 달라진다.)
* H가 행이고 W가 열이다.
코드 (C++)
채점 결과
한마디
쉬운 문제만 풀다 보니까 방문 배열 처리를 너무 간단하게 처리하는 버릇이 생긴 것 같다.
여러 유형의 문제들을 풀어 보면서 좀 더 꼼꼼하게 푸는 습관을 만들어야 겠다. 😲
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 1461 도서관 (C++) (0) | 2021.01.31 |
---|---|
[BOJ] 백준 2638 치즈 (C++) (0) | 2021.01.30 |
[BOJ] 백준 14923 미로 탈출 (C++) (0) | 2021.01.30 |
[BOJ] 백준 17281 ⚾ (C++) (0) | 2021.01.01 |
[BOJ] 백준 8896 가위 바위 보 (C++) (0) | 2020.12.31 |