๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2072_์˜ค๋ชฉ

๋ฟŒ์•ผ._. 2024. 6. 18. 11:49

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/2072)

< ์˜ค๋ชฉ >

 

๋ฌธ์ œ ํ’€์ด 

 

5๊ฐœ๋ฅผ ์—ฐ์†์œผ๋กœ ๋†“์•˜์„ ๊ฒฝ์šฐ ์ด๊ธฐ๋ฏ€๋กœ 10 ์ˆ˜๋ถ€ํ„ฐ ๋Œ์„ ๋†“์„ ๋•Œ๋งˆ๋‹ค ์ŠนํŒจ๊ฐ€ ๊ฐˆ๋ฆฌ๋Š” ํ™•์ธ ํ•œ๋‹ค.

 

 my solution (Java)

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

public class _2072_ { // ์˜ค๋ชฉ
	static int arr[][];

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int n = Integer.parseInt(bf.readLine());

		arr = new int[20][20];
		boolean flag = false;
		for (int i = 1; i <= n; i++) {
			st = new StringTokenizer(bf.readLine());

			int x = Integer.parseInt(st.nextToken());
			int y = Integer.parseInt(st.nextToken());

			if (i % 2 == 1) {
				arr[x][y] = 1;
			} else {
				arr[x][y] = 2;
			}
			
			if (i < 10) {
				continue;
			}
			
			boolean temp = check(x, y, arr[x][y]);
			if (temp) {
				flag = true;
				System.out.println(i);
				break;
			}
		}
		if (!flag) {
			System.out.println(-1);
		}
	}

	private static boolean check(int x, int y, int num) {
		// ๊ฐ€๋กœ
		int b = y - 1;
		int cnt = 1;
		while (b > 0) {
			if (arr[x][b] == num) {
				cnt += 1;
				b -= 1;
			} else {
				break;
			}
		}
		b = y + 1;
		while (b < 20) {
			if (arr[x][b] == num) {
				cnt += 1;
				b += 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return true;
		}

		// ์„ธ๋กœ
		int a = x - 1;
		cnt = 1;
		while (a > 0) {
			if (arr[a][y] == num) {
				cnt += 1;
				a -= 1;
			} else {
				break;
			}
		}
		a = x + 1;
		while (a < 20) {
			if (arr[a][y] == num) {
				cnt += 1;
				a += 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return true;
		}

		// ๋Œ€๊ฐ์„ 
		a = x - 1;
		b = y - 1;
		cnt = 1;
		while (a > 0 && b > 0) {
			if (arr[a][b] == num) {
				cnt += 1;
				a -= 1;
				b -= 1;
			} else {
				break;
			}
		}
		a = x + 1;
		b = y + 1;
		while (a < 20 && b < 20) {
			if (arr[a][b] == num) {
				cnt += 1;
				a += 1;
				b += 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return true;
		}

		a = x - 1;
		b = y + 1;
		cnt = 1;
		while (a > 0 && b < 20) {
			if (arr[a][b] == num) {
				cnt += 1;
				a -= 1;
				b += 1;
			} else {
				break;
			}
		}
		a = x + 1;
		b = y - 1;
		while (a < 20 && b > 0) {
			if (arr[a][b] == num) {
				cnt += 1;
				a += 1;
				b -= 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return true;
		}
		return false;
	}
}
๋ณ€์ˆ˜)
n : ๋ฐ”๋‘‘ํŒ์— ๋†“์ด๋Š” ๋Œ์˜ ๊ฐœ์ˆ˜
arr : ๋ฐ”๋‘‘ํŒ ์ƒํƒœ
flag : ์ŠนํŒจ๊ฐ€ ๊ฐˆ๋ ธ๋Š”์ง€ ํ™•์ธ
x, y : ๋ฐ”๋‘‘ํŒ์— ๋†“์ด๋Š” ๋Œ์˜ ์ขŒํ‘œ

 

๋ฐ”๋‘‘ํŒ์— ๋†“์ด๋Š” ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ขŒํ‘œ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ‘(1), ๋ฐฑ(2)์— ๋งž๊ฒŒ ๋ฐ”๋‘‘ํŒ์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. 10์ˆ˜ ๋ฏธ๋งŒ์ผ ๊ฒฝ์šฐ 5๊ฐœ ์—ฐ์†์œผ๋กœ ๋Œ์„ ๋†“์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ 10์ˆ˜ ์ด์ƒ์ผ ๋•Œ๋ถ€ํ„ฐ check ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์ŠนํŒจ๋ฅผ ํ™•์ธํ•œ๋‹ค. ์ŠนํŒจ๊ฐ€ ๊ฐˆ๋ ธ๋‹ค๋ฉด ๋ช‡ ์ˆ˜์ธ์ง€ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋‹ค ๋†“์€ ํ›„ ์ŠนํŒจ๊ฐ€ ๊ฐˆ๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

check (int x, int y , int num)

๊ฐ€๋กœ

: ํ˜„์žฌ ์œ„์น˜์—์„œ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉฐ ๊ฐ™์€ ์ƒ‰์˜ ๋Œ์ด ์—ฐ์†ํ•ด์„œ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

์„ธ๋กœ

: ํ˜„์žฌ ์œ„์น˜์—์„œ ์œ„์™€ ์•„๋ž˜๋กœ ์‚ดํŽด๋ณด๋ฉฐ ๊ฐ™์€ ์ƒ‰์˜ ๋Œ์ด ์—ฐ์†ํ•ด์„œ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

๋Œ€๊ฐ์„ 

: ํ˜„์žฌ ์œ„์น˜์—์„œ ์™ผ์ชฝ ์œ„์™€ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ๊ฐ™์€ ์ƒ‰์˜ ๋Œ์ด ์—ฐ์†ํ•ด์„œ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

: ํ˜„์žฌ ์œ„์น˜์—์„œ ์˜ค๋ฅธ์ชฝ ์œ„์™€ ์™ผ์ชฝ ์•„๋ž˜๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ๊ฐ™์€ ์ƒ‰์˜ ๋Œ์ด ์—ฐ์†ํ•ด์„œ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.