๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2615_์˜ค๋ชฉ

๋ฟŒ์•ผ._. 2024. 6. 26. 14:26

Silver I

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

< ์˜ค๋ชฉ >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์„ ์‚ดํŽด๋ณด๋ฉฐ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 my solution (Java)

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

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

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

		arr = new int[20][20];
		for (int i = 1; i <= 19; i++) {
			st = new StringTokenizer(bf.readLine());
			for (int j = 1; j <= 19; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		boolean flag = false;
		for (int i = 1; i <= 19; i++) {
			for (int j = 1; j <= 19; j++) {
				if (arr[i][j] != 0) {
					int temp[]=search(i, j, arr[i][j]);
					if (temp != null) {
						flag = true;
						bw.write(arr[i][j] + "\n");
						bw.write(temp[0] + " " + temp[1]);
						break;
					}
				}
			}
			if (flag) {
				break;
			}
		}
		if (!flag) {
			bw.write("0");
		}
		bw.flush();
	}

	private static int[] search(int i, int j, int num) {
		int resultX = 20, resultY = 20;

		// ๊ฐ€๋กœ
		int x = i, y = j, cnt = 0;
		while (y < 20) {
			if (arr[x][y] == num) {
				resultY = Math.min(resultY, y);
				cnt += 1;
				y += 1;
			} else {
				break;
			}
		}
		y = j - 1;
		while (y >= 0) {
			if (arr[x][y] == num) {
				resultY = Math.min(resultY, y);
				cnt += 1;
				y -= 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return new int[] { x, resultY };
		}

		// ์„ธ๋กœ
		resultY = 20;
		y = j;
		cnt = 0;
		while (x < 20) {
			if (arr[x][y] == num) {
				resultX = Math.min(resultX, x);
				cnt += 1;
				x += 1;
			} else {
				break;
			}
		}
		x = i - 1;
		while (x >= 0) {
			if (arr[x][y] == num) {
				resultX = Math.min(resultX, x);
				cnt += 1;
				x -= 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return new int[] { resultX, y };
		}

		// ๋Œ€๊ฐ์„ 
		resultX = 20;
		x = i;
		cnt = 0;
		while (x < 20 && y < 20) {
			if (arr[x][y] == num) {
				if (resultY > y) {
					resultX = x;
					resultY = y;
				}
				cnt += 1;
				x += 1;
				y += 1;
			} else {
				break;
			}
		}
		x = i - 1;
		y = j - 1;
		while (x >= 0 && y >= 0) {
			if (arr[x][y] == num) {
				if (resultY > y) {
					resultX = x;
					resultY = y;
				}
				cnt += 1;
				x -= 1;
				y -= 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return new int[] { resultX, resultY };
		}

		resultX = 20;
		resultY = 20;
		x = i;
		y = j;
		cnt = 0;
		while (x < 20 && y >= 0) {
			if (arr[x][y] == num) {
				if (resultY > y) {
					resultX = x;
					resultY = y;
				}
				cnt += 1;
				x += 1;
				y -= 1;
			} else {
				break;
			}
		}
		x = i - 1;
		y = j + 1;
		while (x >= 0 && y < 20) {
			if (arr[x][y] == num) {
				if (resultY > y) {
					resultX = x;
					resultY = y;
				}
				cnt += 1;
				x -= 1;
				y += 1;
			} else {
				break;
			}
		}
		if (cnt == 5) {
			return new int[] { resultX, resultY };
		}
		return null;
	}
}
๋ณ€์ˆ˜)
arr : ๋ฐ”๋‘‘ํŒ ์ •๋ณด
flag : ์Šน๋ถ€ ๊ฒฐ์ • ์—ฌ๋ถ€
temp : ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ ์œ„์น˜

 

๋ฐ”๋‘‘ํŒ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋ฐ”๋‘‘ํŒ์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํฐ์ƒ‰์ด๋‚˜ ๊ฒ€์€์ƒ‰ ๋ฐ”๋‘‘์•Œ์ด ์žˆ๋‹ค๋ฉด search ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€๋กœ, ์„ธ๋กœ, ๋Œ€๊ฐ์„ ์„ ํƒ์ƒ‰ํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ทธ ๋ฐ”๋‘‘์•Œ์˜ ์ƒ‰์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์˜ ์œ„์น˜๋ฅผ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒํ•œ๋‹ค. ๋ฐ”๋‘‘ํŒ์„ ํƒ์ƒ‰ ํ›„์—๋„ ์Šน๋ถ€๊ฐ€ ๊ฒฐ์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

search (int i, int j, int num)

1) ๊ฐ€๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์œ„์น˜์—์„œ ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ์„ ์‚ดํŽด๋ณธ๋‹ค. ๊ฐ™์€ ์ƒ‰์˜ ๋ฐ”๋‘‘์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

2) ์„ธ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์œ„์น˜์—์„œ ์•„๋ž˜, ์œ„๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ๊ฐ™์€ ์ƒ‰์˜ ๋ฐ”๋‘‘์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

3) ๋Œ€๊ฐ์„ ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์œ„์น˜์—์„œ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์™ผ์ชฝ ์œ„๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ๊ฐ™์€ ์ƒ‰์˜ ๋ฐ”๋‘‘์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

4) ๋Œ€๊ฐ์„ ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์œ„์น˜์—์„œ ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์œ„๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ๊ฐ™์€ ์ƒ‰์˜ ๋ฐ”๋‘‘์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. ๋งŒ์•ฝ ๋‹ค์„ฏ ์•Œ์ด ๋†“์˜€๋‹ค๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ”๋‘‘์•Œ์˜ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.