-
https://www.acmicpc.net/problem/2665
2665번: 미로만들기
첫 줄에는 한 줄에 들어가는 방의 수 n(1 ≤ n ≤ 50)이 주어지고, 다음 n개의 줄의 각 줄마다 0과 1이 이루어진 길이가 n인 수열이 주어진다. 0은 검은 방, 1은 흰 방을 나타낸다.
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%202665
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 map가 주어지고 0,0에서 N, N까지 가려고 할 때 벽을 최소 몇 개 부수고 갈 수 있는지
벽 부슨 개수를 구하는 문제다.
해당 문제는 bfs를 이용해서 해결했으며, 약간의 다익스트라 느낌으로 해결했다.
먼저 입력 처리를 하는데 방문 여부에 대해서는 cost라는 2차원 배열을 통해 체크했고
cost배열에는 몇 개 부수고 이동했는지 갱신하기 위해 int형으로 선언하고 max값을 넣어주었다.
bfs를 돌리면서 배열 범위를 벗어나거나, 이동하려는 곳이 출발 값 보다 작거나 같다면
(처음 초기값을 max로 두어서 무조건 커야 하는데 작다면 이미 방문한 상태)
다음 반복문을 수행하도록 하였다.
이후 큐에 방문 위치를 넣어주고 cost 배열을 갱신하는데 만약 이동할 수 있으면 이전 값을 경신해주고
그렇지 않다면 이전 값에 +1 즉 벽을 1개 부순 값을 갱신해 주었고,
최종적으로 cost [N-1][N-1]을 출력하면 정답을 알 수 있다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1535 안녕 JAVA (0) 2021.12.31 Baekjoon 1913 달팽이 JAVA (0) 2021.12.30 Baekjoon 1743 음식물 피하기 JAVA (0) 2021.12.28 Baekjoon 10972 다음 순열 JAVA (0) 2021.12.27 Baekjoon 5212 지구 온난화 JAVA (0) 2021.12.26 댓글