-
https://www.acmicpc.net/problem/2638
2638번: 치즈
첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%202638
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 치즈에 대한 정보가 주어졌을 때 외부에서 치즈랑 접촉하는 공기가 2칸 이상인 치즈를
한 시간마다 녹이며, 최종적으로 몇 시간 후 치즈가 다 녹는지 구하는 문제다.
예전에 치즈 문제를 풀었던적이 있는데 해당 문제랑 비슷해서 같이 첨부한다.
https://soonil.tistory.com/201
Baekjoon 2636 치즈 JAVA
https://www.acmicpc.net/problem/2636 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(<그림 1>에서 네모 칸에 X친 부분)
soonil.tistory.com
해당 문제는 bfs와 dfs를 하나씩 이용해 해결했으며, 크게 어려운 부분은 없었고 단지 공기가 외부, 내부에
존재할 수 있는데 외부 공기만 어떤 식으로 체크할지만 잘 생각하면 된다.
먼저 입력처리를 해주며 사용할 변수들을 선언해준 뒤 map를 만들어 준다. 이후 무한 반복문을 돌리는데
1. 0,0에서 시작해서 공기를 체크하고 외부 공기를 모두 -1로 바꿔주며 공기에 접촉한 치즈를 큐에 넣어준다
(dfs를 사용했으며, 방문 체크부분은 1을 수행할 때마다 초기화해주어야 한다.)
2. 큐가 비었는지 체크 만약 비었다면 모든 치즈 녹음 게임 끝 (1. 에서 치즈를 큐에 넣기 때문)
3. 큐가 빌 때까지 반복하면서 치즈에 대해 상하좌우를 체크해서 -1이 2개 이상 존재하면 해당 치즈 녹이기
(bfs를 사용함)
4. 위의 내용을 끝날 때까지 반복
로직은 위처럼 정말 간단하게 해결했으며, 단지 시키는 데로 구현하면 쉽게 해결 가능한 문제로 보인다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 14923 미로 탈출 JAVA (0) 2021.12.07 Baekjoon 14719 빗물 JAVA (0) 2021.12.04 Baekjoon 2609 최대공약수와 최소공배수 JAVA (0) 2021.12.04 Baekjoon 1316 그룹 단어 체커 JAVA (0) 2021.12.02 Baekjoon 11659 구간 합 구하기 4 JAVA (0) 2021.11.30 댓글