Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- COSPROJAVA1급
- 자바PS
- 게더타운시작
- dp
- 우선순위큐
- COSPRO
- spring
- 알고리즘
- 이젠 골드구현도 어렵네..
- QUICKSTARTGUIDE
- 완전탐색
- DFS
- 취득후기
- 01BFS
- 백준코딩테스트
- 재귀함수
- java
- BFS
- 시뮬레이션
- 백준
- 네트워크플로우
- deque
- 다이나믹프로그래밍
- 구현
- YBMCOS
- 엘라스틱서치
- 다익스트라
- GatherTown
- PS
- 세그먼트트리
Archives
- Today
- Total
공부공간
BOJ - 7576 ) 토마토 본문
https://www.acmicpc.net/problem/7576
익은토마토가 주변에 안익은 토마토를 전파하면서 퍼지는 문제이다.
퍼질때에 값이 일정하게 ( 시간이 + 1 ) 씩 증가하므로
BFS로 퍼지는 최대시간을 구해준다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
int dir[][] = {{1,0},{-1,0},{0,1},{0,-1}};
int answer =0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int map[][] = new int[n][m];
ArrayDeque<int []> dq = new ArrayDeque<>();
// 0 번째는 y 좌표 1번째는 x 좌표 2번째는 날짜
for (int y = 0 ; y<n ;y++) {
st = new StringTokenizer(br.readLine());
for(int x= 0 ; x < m ; x++) {
map[y][x] = Integer.parseInt(st.nextToken());
if(map[y][x]==1) dq.add(new int[] {y,x,0});
// 1이면 시작점이기 때문에 큐에 넣어준다.
}
}
while(!dq.isEmpty()) {
int now[] = dq.poll();
int now_y =now[0]; int now_x = now[1]; int time = now[2];
answer = time;
for(int index = 0 ; index < 4 ; index++) {
int next_y = now_y + dir[index][0];
int next_x = now_x + dir[index][1];
if(next_y >=0 && next_x >= 0 && next_y < n && next_x <m) {
if(map[next_y][next_x]==0) {
// 다음 장소가 익지않은 토마토라면, 1로 변경한후에 시간을 늘리고 큐에 넣어준다.
map[next_y][next_x]=1;
dq.add(new int[] {next_y , next_x , time+1});
}
}
}
}
for(int y = 0 ; y < n ; y++) {
for(int x = 0 ; x < m ; x++) {
// BFS가 끝나고 익지않은 토마토가 있다면, -1을 출력한다.
if(map[y][x]==0) answer = -1;
}
}
System.out.println( answer );
}
}
'알고리즘 > 완전탐색(BFS,DFS)' 카테고리의 다른 글
BOJ- 11404 ) 플로이드 (0) | 2020.02.17 |
---|---|
BOJ - 17471 ) 게리맨더링 (0) | 2020.02.17 |
BOJ - 2146 ) 다리만들기 (0) | 2020.02.13 |
BOJ - 17406 ) 배열돌리기4 (0) | 2020.02.11 |
SWEA ) 벽돌깨기 (0) | 2020.02.09 |
Comments