๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 7์ฃผ์ฐจ] 16236๋ฒˆ ์•„๊ธฐ์ƒ์–ด ๊ณจ๋“œ4 - ์ž๋ฐ”(JAVA) / ์‹œ๋ฎฌ๋ ˆ์ด์…˜/ ๊ตฌํ˜„

๐Ÿ“‘ ๋ฌธ์ œ

 

๋”๋ณด๊ธฐ

๋ฌธ์ œ

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: ์•„๊ธฐ ์ƒ์–ด์˜ ์œ„์น˜

์•„๊ธฐ ์ƒ์–ด๋Š” ๊ณต๊ฐ„์— ํ•œ ๋งˆ๋ฆฌ ์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์—„๋งˆ ์ƒ์–ด์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์žก์•„๋จน์„ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ƒ์–ด๊ฐ€ ํ•œ ๋ฒˆ ์›€์ง์ด๊ธฐ ์ „์— ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ๋†“์€ ๋‹ค์Œ, ์ตœ์†Œ๊ฑฐ๋ฆฌ์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ๋„๋ก ํ–ˆ๋‹ค. ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ํ•œ ๋งˆ๋ฆฌ ๋ฐœ๊ฒฌ๋˜๋”๋ผ๋„ ์ตœ์†Œ๊ฐ’์€ ๊ฐฑ์‹ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค.

 

โœ”๏ธ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ ๋‹ค์Œ ๋จน์ด๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค

โœ”๏ธ ๋‹ค์Œ ๋ฌผ๊ณ ๊ธฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ(sharkD)๋ฅผ MAX๋กœ ์žก์•„๋†“๊ณ  bfs๋กœ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Ÿฌ ๊ฐ„๋‹ค.

โœ”๏ธ ๊ฑฐ๋ฆฌ๊ฐ€ ์ œ์ผ ๊ฐ€๊น๊ณ , ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ๋Š”๋‹ค.

โœ”๏ธ ํƒ์ƒ‰์ด ๋๋‚˜๊ณ  ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ฐพ์•„์กŒ์œผ๋ฉด(sharkD != MAX) ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ์˜ ์œ„์น˜(sharkR, sharkC)๋กœ ์ƒ์–ด์œ„์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ค€๋‹ค.

โœ”๏ธ ๋จน์€ ๋ฌผ๊ณ ๊ธฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ด์ค€๋‹ค. ์ด ๋•Œ ๊ฐœ์ˆ˜๊ฐ€ ์ƒ์–ด ๋ชธ์ง‘๊ณผ ๊ฐ™์•„์กŒ์œผ๋ฉด, ์ƒ์–ด ๋ชธ์ง‘์„ ํ‚ค์›Œ์ฃผ๊ณ  ์นด์šดํŠธ๋Š” ๋‹ค์‹œ 0์ด ๋œ๋‹ค.

โœ”๏ธ ์ƒ์–ด์˜ ์ด๋™๊ฑฐ๋ฆฌ๊ฐ€ ์ด๋™์‹œ๊ฐ„์ด ๋˜๋ฏ€๋กœ, ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์„ ๋•Œ๋งˆ๋‹ค sharkD๋ฅผ ๊ฒฐ๊ณผ๊ฐ’์— ๋”ํ•ด์ค€๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ์‚ผ์„ฑ ๊ธฐ์ถœ๋กœ ์—„์ฒญ์—„์ฒญ ์œ ๋ช…ํ•œ ๋ฌธ์ œ์ด๋‹ค! ์ƒ์–ด ์ €์ฃผ์˜ ์‹œ์ž‘์„ ๋Š์–ด์„œ..?

 ํŒŒ์ด์ฌ ์ฝ”๋“œ๋“ค์€ ์—„์ฒญ ๊น”๋”ํ•˜๋˜๋ฐ, ์ž๋ฐ”๋กœ ๋” ์ž˜ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ์‹ค๋ ฅ์ด ๋Š˜์–ด๋ด์•ผ ์•Œ ๊ฒƒ ๊ฐ™๋‹คใ… ใ… 

 ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ๊ตณ์ด ๋”ฐ๋กœ ์„ค๋ช…ํ• ๊ฑด ์—†๊ณ , ๋ฌธ์ œ์˜ ๋‹จ๊ณ„๋Œ€๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ํ’€๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

public class Main_๋ฐฑ์ค€_16236_์•„๊ธฐ์ƒ์–ด_๊ณจ๋“œIV2 {
	
	static int[][] map;
	static int sharkR, sharkC, sharkD;
	static int N, size, result, MAX = 401;
	static int[] dr = {1, -1, 0, 0};
	static int[] dc = {0, 0, 1, -1};
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		map = new int[N][N];
		
		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int j = 0; j < N; j++) {
				int n = Integer.parseInt(st.nextToken());
				map[i][j] = n;
				if(n==9) {//shark
					sharkR = i;
					sharkC = j;
				}
			}
		}// input
		
		int cnt = 0;//๋จน์€ ๋ฌผ๊ณ ๊ธฐ ๊ฐœ์ˆ˜
		size = 2;//์‹œ์ž‘ํฌ๊ธฐ
		while(true) {//one move
			if(cnt==size) {
				cnt = 0;
				size++;
			}
			
			map[sharkR][sharkC] = 0;
			sharkD = MAX;//๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€๋กœ ์ดˆ๊ธฐํ™”
			bfs(sharkR, sharkC);//ํƒ์ƒ‰
			if(sharkD==MAX) break;//๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๋‹ค
			
			cnt++;
			result += sharkD;
		 }
		
		System.out.println(result);
	}// end of main
	
	static private void bfs(int sr, int sc) {
		
		boolean[][] visited = new boolean[N][N];
		visited[sr][sc] = true;
		Queue<int[]> queue = new LinkedList<int[]>();
		queue.offer(new int[] {sr, sc, 0});
		
		while(queue.size()>0) {
			int[] cur = queue.poll();
			int r = cur[0];
			int c = cur[1];
			int d = cur[2];
			
			for (int i = 0; i < 4; i++) {
				//new position
				int nr = r+dr[i];
				int nc = c+dc[i];
				int nd = d+1;
				
				//exception
				if(nr<0 || nr>=N || nc<0 || nc>=N ||
					map[nr][nc]>size || visited[nr][nc]) continue;
				
				//move
				queue.offer(new int[] {nr, nc, nd});
				visited[nr][nc] = true;
				
				//detection
				if(map[nr][nc]>0 && map[nr][nc]<size) {
					//๊ฑฐ๋ฆฌ๊ฐ€ ๋” ๊ฐ€๊นŒ์šด ๋ฌผ๊ณ ๊ธฐ ๋ฐœ๊ฒฌ
					if(nd<sharkD) {
						sharkR = nr;
						sharkC = nc;
						sharkD = nd;					
					}
					//๋จผ์ € ๋ฐœ๊ฒฌํ•œ ๊ฒƒ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๋ฌผ๊ณ ๊ธฐ ๋ฐœ๊ฒฌ
					else if(nd==sharkD) {
						// ๋งจ์ƒ๋‹จ ๋งจ์ขŒ์ธก ๋ฌผ๊ณ ๊ธฐ์ธ ๊ฒฝ์šฐ
						if(nr<sharkR || (nr==sharkR && nc<sharkC)) {
							sharkR = nr;
							sharkC = nc;
						}
					}
				}
			}//for loop
		}//queue
	}
}//end of class

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ