๐Ÿ˜‰/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์˜ค๋ชฉ (๋ฐฑ์ค€, 2615)

ruhz 2022. 1. 25. 16:27

๋ฌธ์ œ

https://www.acmicpc.net/problem/2615

 

2615๋ฒˆ: ์˜ค๋ชฉ

์˜ค๋ชฉ์€ ๋ฐ”๋‘‘ํŒ์— ๊ฒ€์€ ๋ฐ”๋‘‘์•Œ๊ณผ ํฐ ๋ฐ”๋‘‘์•Œ์„ ๊ต๋Œ€๋กœ ๋†“์•„์„œ ๊ฒจ๋ฃจ๋Š” ๊ฒŒ์ž„์ด๋‹ค. ๋ฐ”๋‘‘ํŒ์—๋Š” 19๊ฐœ์˜ ๊ฐ€๋กœ์ค„๊ณผ 19๊ฐœ์˜ ์„ธ๋กœ์ค„์ด ๊ทธ๋ ค์ ธ ์žˆ๋Š”๋ฐ ๊ฐ€๋กœ์ค„์€ ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ 1๋ฒˆ, 2๋ฒˆ, ... ,19๋ฒˆ์˜ ๋ฒˆํ˜ธ

www.acmicpc.net

 

ํ’€์ด


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	// * ๋ฐฉํ–ฅ์€ ์ˆœ์„œ๋Œ€๋กœ โ†“, โ†’, โ†˜, โ†—
	private static final int[] rowDir = {1, 0, 1, -1};
	private static final int[] colDir = {0, 1, 1, 1};
	private static int[][] board;
	
	// * ํ•ด๋‹น ๋ฐฉํ–ฅ์œผ๋กœ ๋ช‡ ๊ฐœ์˜ ๊ฐ™์€ ๋Œ์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
	public static int[] countLine(int dir, int r, int c) {
		int prev = -1;
		int[] result = new int[3];
		
		int nr = r;
		int nc = c;
		int count = 0;
		
		while(true) {
			// 01. count๊ฐ€ 5์ผ ๋•Œ, ๋Œ์ด ๋ฐ”๋€Œ์—ˆ๊ฑฐ๋‚˜ ๋๋‚ฌ๋‹ค๋ฉด ์ฐพ์•˜๋‹ค! (์กฐ๊ฑด์„ ๋ถ„๋ฆฌํ•ด IndexError๋ฅผ ๋ฐฉ์ง€)
			if(count == 5 && (nr < 0 || nr >= 19 || nc < 0 || nc >= 19)) {
				return result;
			}
			if(count == 5 && board[nr][nc] != prev) {
				return result;
			}
			
			// 02. ํ•ด๋‹น ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ๋ฐ ๋ฒ”์œ„ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ”๋‹ค๋ฉด ํ•ด๋‹น์‚ฌํ•ญ ์—†๋‹ค. 
			if(nr < 0 || nr >= 19 || nc < 0 || nc >= 19) {
				result[0] = -1;
				result[1] = -1;
				result[2] = -1;
				return result;
			}
			
			// 03-1. ๋นˆ ์นธ์€ ๊ทธ๋ƒฅ ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ์ž.
			if(board[nr][nc] == 0) {
				prev = board[nr][nc];
				count = 0;
			}else {
				// 03-2. ๊ธฐ์กด์— ๋ณด๋˜ ๋Œ๊ณผ ์ข…๋ฅ˜๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ์ƒˆ๋กญ๊ฒŒ count ์‹œ์ž‘ํ•œ๋‹ค. 
				if(prev != board[nr][nc]) {
					result[0] = nr+1;
					result[1] = nc+1;
					result[2] = board[nr][nc];
					prev = board[nr][nc];
					count = 1;
				}
				// 03-3. ๊ธฐ์กด์— ๋ณด๋˜ ๋Œ๊ณผ ์ข…๋ฅ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด count๋ฅผ ๊ณ„์†ํ•œ๋‹ค. 
				else {
					count ++;
				}
			}
			
			// 04. ํ•ด๋‹น ๋ฐฉํ–ฅ ๋‹ค์Œ ๋Œ์„ ๋ฐ”๋ผ๋ณธ๋‹ค. 
			nr += rowDir[dir];
			nc += colDir[dir];
		}
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 00. ๋ฐ”๋‘‘ํŒ์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.
		board = new int[19][19];
		for(int i = 0; i < 19; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			for(int j = 0; j < 19; j++) {
				board[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		
		// 01. ๊ฐ ๋ฐฉํ–ฅ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. 
		int[] result;
		
		// โ†“ ๋ฐฉํ–ฅ ์ผ๊ด„๊ฒ€์‚ฌ
		for(int j = 0; j < 19; j++) {
			result = countLine(0, 0, j);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		
		// โ†’ ๋ฐฉํ–ฅ ๊ฒ€์‚ฌ
		for(int i = 0; i < 19; i++) {
			result = countLine(1, i, 0);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		
		// โ†˜ ๋ฐฉํ–ฅ ๊ฒ€์‚ฌ
		for(int j = 0; j < 19; j++) {
			result = countLine(2, 0, j);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		for(int i = 1; i < 19; i++) {
			result = countLine(2, i, 0);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		
		// โ†— ๋ฐฉํ–ฅ ๊ฒ€์‚ฌ
		for(int i = 0; i < 19; i++) {
			result = countLine(3, i, 0);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		for(int j = 1; j < 19; j++) {
			result = countLine(3, 18, j);
			if(result[0] == -1) {
				continue;
			} else {
				System.out.println(result[2]);
				System.out.println(result[0] + " " + result[1]);
				return;
			}
		}
		
		// ํ•ด๋‹น์—†๋‹ค๋ฉด 0 ์ถœ๋ ฅ!
		System.out.println("0");
	}
}

 

๋ฌธ์ œ๋ฅผ ์ ‘ํ•˜๊ณ  ๋‘ ๊ฐ€์ง€ ํ’€์ด ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ•  ์ง€ ๊ณ ๋ฏผํ•ด๋ดค๋‹ค.

  1. ๋ชจ๋“  ๊ฐ๊ฐ์˜ ์ž๋ฆฌ๋ฅผ  ๊ธฐ์ค€์œผ๋กœ ๋„ค ๋ฐฉํ–ฅ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  2. ๋ฐ”๋‘‘ํŒ ์ „์ฒด๋ฅผ ๋†“๊ณ , ํ–‰, ์—ด, ๋Œ€๊ฐ์„ ์— ์—ฐ์†๋œ 5๊ฐœ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ตฌํ˜„์€ ๋น„์Šทํ•˜๊ฒŒ ํ’€์–ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๋„ค ๋ฐฉํ–ฅ ํƒ์ƒ‰์˜ 1๋ฒˆ์ด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•˜์œผ๋‚˜, 2๋ฒˆ ๋ฐฉ๋ฒ•์ด ์„ฑ๋Šฅ์— ์žˆ์–ด์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ณ , ๋Œ์˜ ๊ฐœ์ˆ˜์— ๊ด€๊ณ„์—†์ด ์•ˆ์ •์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ™์€ ๋ฐฉํ–ฅ์— ์žˆ์–ด์„œ ๊ฐ™์€ ์›์†Œ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๊ฒ€์‚ฌ ๋Œ€์ƒ์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋งŒ์•ฝ 1๋ฒˆ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์ด๋ฅผ ํ•œ๋‹ค๋ฉด, ๊ฒ€์‚ฌํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๊ณ„์†ํ•ด์„œ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํ’€๋ฉด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.