๋ฌธ์ (์ถ์ฒ: 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) ๋๊ฐ์ ์ ํ์ํ๊ธฐ ์ํด ํ์ฌ ์์น์์ ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋ฅผ ์ดํด๋ณธ๋ค. ๊ฐ์ ์์ ๋ฐ๋์์ด ๋์๋ค๋ฉด ๊ณ์ํด์ ํ์ธํ๊ณ ๊ทธ๋ ์ง ์๋ค๋ฉด ์ข ๋ฃํ๋ค. ๋ง์ฝ ๋ค์ฏ ์์ด ๋์๋ค๋ฉด ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ๋ฐ๋์์ ์์น๋ฅผ ๋ฐํํ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 4396_์ง๋ขฐ ์ฐพ๊ธฐ (0) | 2024.06.28 |
---|---|
[Baekjoon] 4108_์ง๋ขฐ์ฐพ๊ธฐ (0) | 2024.06.27 |
[Baekjoon] 9204_์ฒด์ค (0) | 2024.06.25 |
[Baekjoon] 1474_๋ฐ ์ค (1) | 2024.06.24 |
[Baekjoon] 26170_์ฌ๊ณผ ๋นจ๋ฆฌ ๋จน๊ธฐ (0) | 2024.06.21 |