๋ฌธ์ (์ถ์ฒ: 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)
๊ฐ๋ก
: ํ์ฌ ์์น์์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ดํด๋ณด๋ฉฐ ๊ฐ์ ์์ ๋์ด ์ฐ์ํด์ ๋ช ๊ฐ ์๋์ง ํ์ธํ๋ค.
์ธ๋ก
: ํ์ฌ ์์น์์ ์์ ์๋๋ก ์ดํด๋ณด๋ฉฐ ๊ฐ์ ์์ ๋์ด ์ฐ์ํด์ ๋ช ๊ฐ ์๋์ง ํ์ธํ๋ค.
๋๊ฐ์
: ํ์ฌ ์์น์์ ์ผ์ชฝ ์์ ์ค๋ฅธ์ชฝ ์๋๋ฅผ ์ดํด๋ณด๋ฉฐ ๊ฐ์ ์์ ๋์ด ์ฐ์ํด์ ๋ช ๊ฐ ์๋์ง ํ์ธํ๋ค.
: ํ์ฌ ์์น์์ ์ค๋ฅธ์ชฝ ์์ ์ผ์ชฝ ์๋๋ฅผ ์ดํด๋ณด๋ฉฐ ๊ฐ์ ์์ ๋์ด ์ฐ์ํด์ ๋ช ๊ฐ ์๋์ง ํ์ธํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 2777_์ซ์ ๋์ด (0) | 2024.06.20 |
---|---|
[Baekjoon] 5002_๋์ด๋งจ (0) | 2024.06.19 |
[Baekjoon] 1120_๋ฌธ์์ด (0) | 2024.06.17 |
[Baekjoon] 12887_๊ฒฝ๋ก ๊ฒ์ (0) | 2024.06.14 |
[Baekjoon] 29891_์ฒดํฌํฌ์ธํธ ๋ฌ๋ฆฌ๊ธฐ (0) | 2024.06.13 |