-
[์ผ์ฑSWํ ์คํธ] ์๊ธฐ ์์ด JAVASTUDY ๐/์๊ณ ๋ฆฌ์ฆ 2021. 2. 17. 17:15๋ฐ์ํ
[๋ฌธ์ ]
16236๋ฒ: ์๊ธฐ ์์ด
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค. ์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ
www.acmicpc.net
N×N ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๋ฌผ๊ณ ๊ธฐ M๋ง๋ฆฌ์ ์๊ธฐ ์์ด 1๋ง๋ฆฌ๊ฐ ์๋ค. ๊ณต๊ฐ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ ์นธ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ต๋ 1๋ง๋ฆฌ ์กด์ฌํ๋ค.
์๊ธฐ ์์ด์ ๋ฌผ๊ณ ๊ธฐ๋ ๋ชจ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ์ด ํฌ๊ธฐ๋ ์์ฐ์์ด๋ค. ๊ฐ์ฅ ์ฒ์์ ์๊ธฐ ์์ด์ ํฌ๊ธฐ๋ 2์ด๊ณ , ์๊ธฐ ์์ด๋ 1์ด์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ํ ์นธ์ฉ ์ด๋ํ๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ํฐ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๊ณ , ๋๋จธ์ง ์นธ์ ๋ชจ๋ ์ง๋๊ฐ ์ ์๋ค. ์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ๋ณด๋ค ์์ ๋ฌผ๊ณ ๊ธฐ๋ง ๋จน์ ์ ์๋ค. ๋ฐ๋ผ์, ํฌ๊ธฐ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๋ ๋จน์ ์ ์์ง๋ง, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ ์ง๋๊ฐ ์ ์๋ค.
์๊ธฐ ์์ด๊ฐ ์ด๋๋ก ์ด๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.- ๋ ์ด์ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๊ณต๊ฐ์ ์๋ค๋ฉด ์๊ธฐ ์์ด๋ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ผ๋ฉด, ๊ทธ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ 1๋ง๋ฆฌ๋ณด๋ค ๋ง๋ค๋ฉด, ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฌ ๊ฐ๋ค.
- ๊ฑฐ๋ฆฌ๋ ์๊ธฐ ์์ด๊ฐ ์๋ ์นธ์์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ๋, ์ง๋์ผํ๋ ์นธ์ ๊ฐ์์ ์ต์๊ฐ์ด๋ค.
- ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง๋ค๋ฉด, ๊ฐ์ฅ ์์ ์๋ ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋ฌํ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ๋ง๋ฆฌ๋ผ๋ฉด,
๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค.์๊ธฐ ์์ด์ ์ด๋์ 1์ด ๊ฑธ๋ฆฌ๊ณ , ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ฆ, ์๊ธฐ ์์ด๊ฐ ๋จน์ ์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ๋ค๋ฉด, ์ด๋๊ณผ ๋์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋๋ค. ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ผ๋ฉด, ๊ทธ ์นธ์ ๋น ์นธ์ด ๋๋ค.
์๊ธฐ ์์ด๋ ์์ ์ ํฌ๊ธฐ์ ๊ฐ์ ์์ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์ ๋ ๋ง๋ค ํฌ๊ธฐ๊ฐ 1 ์ฆ๊ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 2์ธ ์๊ธฐ ์์ด๋ ๋ฌผ๊ณ ๊ธฐ๋ฅผ 2๋ง๋ฆฌ ๋จน์ผ๋ฉด ํฌ๊ธฐ๊ฐ 3์ด ๋๋ค.
๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ธฐ ์์ด๊ฐ ๋ช ์ด ๋์ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.[์ ๋ ฅ]
์ฒซ์งธ ์ค์ ๊ณต๊ฐ์ ํฌ๊ธฐ N(2 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ณต๊ฐ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ณต๊ฐ์ ์ํ๋ 0, 1, 2, 3, 4, 5, 6, 9๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์๋์ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
- 0: ๋น ์นธ
- 1, 2, 3, 4, 5, 6: ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ
- 9: ์๊ธฐ ์์ด์ ์์น[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ์๊ธฐ ์์ด๊ฐ ์๋ง ์์ด์๊ฒ ๋์์ ์์ฒญํ์ง ์๊ณ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ก์๋จน์ ์ ์๋ ์๊ฐ์ ์ถ๋ ฅํ๋ค.[Solution]
package boj16236_์๊ธฐ์์ด; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static class Point { int r, c, dist; public Point(int r, int c, int dist) { this.r = r; this.c = c; this.dist = dist; } } static int n; static int[][] map; static int answer, eatCnt; static int sr, sc; static int[] dx = {0, -1, 0, 1}; static int[] dy = {1, 0, -1, 0}; static ArrayList<Point> fish; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); map = new int[n][n]; int babySharkState = 2; for(int i=0; i<n; ++i) { st = new StringTokenizer(br.readLine()); for(int j=0; j<n; ++j) { //0 : ๋น์นธ //1,2,3,4,5,6 : ์นธ์ ์๋ ๋ฌผ๊ณ ๊ธฐ์ ํฌ๊ธฐ //9 : ์๊ธฐ์์ด์ ์์น map[i][j] = Integer.parseInt(st.nextToken()); if(map[i][j] == 9) { //์๊ธฐ์์ด์ ์์น (i,j) sr = i; sc = j; map[i][j] = 0; } } } while(true) { Queue<Point> bfs = new LinkedList<>(); fish = new ArrayList<>(); //๋จน์ด ๋ฌผ๊ณ ๊ธฐ ๋ฆฌ์คํธ boolean visited[][] = new boolean[n][n]; bfs.add(new Point(sr, sc, 0)); visited[sr][sc] = true; //BFS while(!bfs.isEmpty()) { Point babyShark = bfs.poll(); //์ํ์ข์ฐ ํ์ for(int i=0; i<4; ++i) { int nr = babyShark.r + dy[i]; int nc = babyShark.c + dx[i]; if(nr<0 || nr>=n || nc<0 || nc>=n) continue; //์ขํ ๋ฒ์ ๋ฒ์ด๋๋ฉด ๋ค๋ฅธ์ขํ ํ์ if(visited[nr][nc]) continue; //๋ฐฉ๋ฌธํ ์ขํ๋ ์ง๋๊ฐ๊ธฐ //๋จน์ด๋ฅผ ์ฐพ์ผ๋ฉด(๋จน์ด๋ 1~6๊น์ง) //์๊ธฐ์์ด ํฌ๊ธฐ๋ณด๋ค ์์ผ๋ฉด ๋จน์์์๋ ๋ฌผ๊ณ ๊ธฐ if (1 <= map[nr][nc] && map[nr][nc] <= 6 && map[nr][nc] < babySharkState) { bfs.offer(new Point(nr, nc, babyShark.dist + 1)); //์์ด์ ์์น ๊ฐฑ์ , ํ์นธ ์ด๋ํ์ผ๋ฏ๋ก ๊ฑฐ๋ฆฌ+1 fish.add(new Point(nr, nc, babyShark.dist + 1)); //๋จน์ด ๋ฆฌ์คํธ์ ์ฝ์ visited[nr][nc] = true; //๋ฐฉ๋ฌธ ํ์ } else if(map[nr][nc] == babySharkState || map[nr][nc] == 0) { bfs.offer(new Point(nr, nc, babyShark.dist + 1)); //์์ด ์์น ๊ฐฑ์ , ํ์นธ ์ด๋ํ์ผ๋ฏ๋ก ๊ฑฐ๋ฆฌ+1 visited[nr][nc] = true; //๋ฐฉ๋ฌธ ํ์ } } } //๋จน์ด ๋ฌผ๊ณ ๊ธฐ๊ฐ ์์ if(fish.size() == 0) break; //๋จน์ด๋ฌผ๊ณ ๊ธฐ๊ฐ ์ฌ๋ฌ๋ง๋ฆฌ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฌผ๊ณ ๊ธฐ ์ฐพ์์ ๋จน๊ธฐ Point eat = fish.get(0); for(int i=1; i<fish.size(); ++i) { //๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ๋ฌผ๊ณ ๊ธฐ ์ฐพ์์ ๋จน๊ธฐ if(eat.dist > fish.get(i).dist) { eat = fish.get(i); } //๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง์ผ๋ฉด ๊ฐ์ฅ ์์์๋ ๋ฌผ๊ณ ๊ธฐ ๋จน๊ธฐ(r์ด ๊ฐ์ฅ ์์) //๊ฐ์ฅ์์ r์์น์ ์๋ ๋ฌผ๊ณ ๊ธฐ๊ฐ ๋ง์ผ๋ฉด ๊ฐ์ฅ ์ผ์ชฝ๋ถํฐ (c๊ฐ ๊ฐ์ฅ ์์) if(eat.dist == fish.get(i).dist) { if(eat.r > fish.get(i).r) { eat = fish.get(i); } } } answer += eat.dist; //๋จน์ ๋ฌผ๊ณ ๊ธฐ ๊ฑฐ๋ฆฌ๋งํผ ์๊ฐ ์ง๋จ(1์นธ์ด๋์ 1h) eatCnt++; //๋จน์ ๋ฌผ๊ณ ๊ธฐ cnt+1 map[eat.r][eat.c] = 0; //๋ฌผ๊ณ ๊ธฐ ๋จน์์ผ๋ ์์ ๊ธฐ //๋จน์ ๋ฌผ๊ณ ๊ธฐ ์๊ฐ ์๊ธฐ์์ด ํฌ๊ธฐ๋ ๊ฐ์์ง๋ฉด if(eatCnt == babySharkState) { //์๊ธฐ์์ด ํฌ๊ธฐ ์ฆ๊ฐ, ๋จน์ ๋ฌผ๊ณ ๊ธฐ ์ ์ด๊ธฐํ babySharkState++; eatCnt = 0; } //์๊ธฐ์์ด ์ขํ ์ด๋ sr = eat.r; sc = eat.c; } System.out.println(answer); } }
๋ฐ์ํ'STUDY ๐ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[2020 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฝ๋ฉํ ์คํธ] ๊ฐ์ฌ ๊ฒ์ JAVA (0) 2021.02.17 [BOJ] 4485 ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง? JAVA (0) 2021.02.15 [BOJ] 15649~15652 N๊ณผ M JAVA (0) 2021.02.15 [BOJ] 2887 ํ์ฑ ํฐ๋ JAVA (0) 2021.02.09 [BOJ] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ_JAVA (0) 2021.02.09