알고리즘76 :: BOJ_7576_토마토
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | package backjun모음; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; /* * * * */ /* * 동작원리 * 입력받은 맵으로부터 1 이라고 써인 위치의 지점을 큐에 넣습니다. * 큐에서 꺼내어 4방향(좌, 우, 위, 아래) 로 탐색을 진행합니다. * 이때 주의해야할것은 1이 하나가 아니라 여러개가 있을 수 있기 때문에 * 탐색의 횟수를 하나의 값으로 설정하는것이 아니라, 큐에 넣는 값으로 둬야 * 동시에 1인 위치에서 4방향 탐색을 진행하더라도 방문체크를 해주기 때문에 끝나는 순간에 정답을 도출할 수 있다고 생각했습니다. * 또 맵에서 -1인 지점은 갈수 없는 곳입니다. 따라서 이 부분도 역시 방문체크를 했습니다. (탐색에서는 진행될 수 없으므로) */ class VVV{ int x; int y; int cnt; VVV(int x, int y, int cnt){ this.x=x; this.y=y; this.cnt = cnt; } } public class backjun_7576_토마토 { static int[][] map; static int[][] visit; static int a; static int b; static int dx[] = {0,0,-1,1}; static int dy[] = {1,-1,0,0}; static int ans =0; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub System.setIn(new FileInputStream("res/backjun_7576.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); Queue<VVV> q = new LinkedList<>(); a = Integer.parseInt(st.nextToken()); b = Integer.parseInt(st.nextToken()); map = new int[b][a]; visit = new int[b][a]; for(int i=0; i<b; i++) { st = new StringTokenizer(br.readLine()); for(int j=0; j<a; j++) { map[i][j] = Integer.parseInt(st.nextToken()); if(map[i][j] ==1) { visit[i][j] = 1; q.add(new VVV(i,j,0)); } else if(map[i][j] == -1) visit[i][j] = 1; } } while(!q.isEmpty()) { VVV sxx = q.remove(); int tempx = sxx.x; int tempy = sxx.y; int tempcnt = sxx.cnt; for(int as=0; as<4; as++) { int ddx = tempx + dx[as]; int ddy = tempy + dy[as]; if(0<=ddx && ddx<b && 0<=ddy && ddy<a && visit[ddx][ddy]==0 && map[ddx][ddy]!=-1) { visit[ddx][ddy]=1; ans = tempcnt+1; q.add(new VVV(ddx,ddy,tempcnt+1)); } } } for(int f=0; f<b; f++) { for(int c=0; c<a; c++) { if(visit[f][c] ==0) ans = -1; } } System.out.println(ans); } } | cs |
'알고리즘' 카테고리의 다른 글
알고리즘78 :: SWEA_원자 소멸 시뮬레이션(작성중) (0) | 2020.04.09 |
---|---|
알고리즘77 :: 이분탐색이란? BOJ_13702에 적용 (0) | 2020.03.18 |
알고리즘75 :: BOJ_6603_로또 (0) | 2020.03.11 |
알고리즘74 :: BOJ_3055_탈출 (0) | 2020.02.29 |
알고리즘73 : : BOJ_1316_그룹단어체커 (0) | 2020.02.28 |
댓글
이 글 공유하기
다른 글
-
알고리즘78 :: SWEA_원자 소멸 시뮬레이션(작성중)
알고리즘78 :: SWEA_원자 소멸 시뮬레이션(작성중)
2020.04.09 -
알고리즘77 :: 이분탐색이란? BOJ_13702에 적용
알고리즘77 :: 이분탐색이란? BOJ_13702에 적용
2020.03.18 -
알고리즘75 :: BOJ_6603_로또
알고리즘75 :: BOJ_6603_로또
2020.03.11 -
알고리즘74 :: BOJ_3055_탈출
알고리즘74 :: BOJ_3055_탈출
2020.02.29