์ด ํ๋ก์ ํธ๋ ๋ํ๊ต ๋์๋ฆฌ์์ ํ์ ์์น ์๋ฐ ์์
ํ์ ์๋ฐ๋ก ์ ์ํ๋ ๊ฐ๋จํ ํ๋ก์ ํธ๋ค.
์ ์ด์ ์์ ์๋ฐ์ง์์ผ๋ก ํ ์ ์๋ ๊ฒ๋ ํ์ ๋์ด์๊ณ , ์๋ฐ๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ๊ฐ์ ๋ฌต์งํ ๋ฒก์๋ ์๋ฒ๋ Spring, Flutter ๋ฑ๊ณผ ์ฐ๊ณํด์ ์ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์งํํ ๊น ์๊ฐํด๋ณด๋ค ๊ฐ๋จํ๊ฒ ์๋ฐ๋ก ์ค๋ชฉ์ ๋ง๋ค์ด๋ณด๊ธฐ๋ก ํ๋ค. ์ฐพ์๋ณด๋ ๋ฐฑ์ค 2615๋ฒ ๋ฌธ์ ์ ๋งค์ฐ ํก์ฌํด ์ด๋ฅผ ์ฐธ๊ณ ํ๊ธฐ๋ ํ๋ค.
ํฐ ํ๋ก์ ํธ๋ ์๋๋ฉฐ ์๋ฐ๋ฅผ ์ฒ์ ์ ํ๊ฑฐ๋ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋จผ์ ์ธํฐํ์ด์ค๋ถํฐ ๊ตฌ์์ ํด์ฃผ๊ธฐ๋ก ํ์๋ค.
GUIํด์ ์ธ ์๊ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋จ์ํ ์ฝ์ ์ถ๋ ฅ ํ์์ผ๋ก ์ ์ํ ์์ ์ด์๋ค.
์์ ์ฌ์ง์ ๋ณด๋ค์ํผ ํด๋์ค๋ ๋ฉ์ธ ์ธํฐํ์ด์ค์ ํ๋ฉด์ ๋ด๋นํ๋ Omok_Main ํด๋์ค์ ์์น ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์
ํ Find ํด๋์ค๋ฅผ ๋จผ์ ๋ง๋ค์ด์ฃผ์๋ค.
//๋ฐ๋ํ
static int [][] matrix = new int[10][10];
static int count;
static int i;
Omok_Main ๋ถํฐ ์์ฑ์ ์์ํด๋ณด์.
๋จผ์ ๋ณด๋ค์ํผ matrix๊ฐ์ ๊ฒฝ์ฐ๋ static์ผ๋ก ์ ์ธ์ ํด์ฃผ์๋๋ฐ, ์ด๊ฒ ๋ฌด์จ ํฐ ํ๋ก์ ํธ๋ ์๋ ๋ฟ ๋๋ฌ ํจํค์ง ๋ด์ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ๋๋ฐ์ ์์ ์์ ์ด๊ธฐ ๋๋ฌธ์ ์ ์ ์ผ๋ก ์ ์ธํด๋ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ๋ง์ฝ ๋ ํฐ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฒ ๋๋ค๋ฉด ์ ์ ๋ฉ์๋๋ ์ข ๋ ์ ์คํ ์จ์ผ ํ ๊ฒ ๊ฐ๋ค.
๊ทธ์ธ ํ๋ ์ด์ด 1,2๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํ count ๋ณ์์ i๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค.
//์ถ๋ ฅ
void print()
{
for(int i=0;i<Array.getLength(matrix);i++)
{
System.out.print(Arrays.toString(matrix[i]));
System.out.println("");
}
์ด๊ฑด ๊ทธ๋ฅ ๋จ์ํ ๋ฐฐ์ด ์ถ๋ ฅ ๋ฉ์๋๋ค. ์ค๋ช ํ ๊ฒ ๋ ์์๊น.
public static void main(String args[])
{
Omok_Main m = new Omok_Main();
Scanner input = new Scanner(System.in);
count++;
System.out.println("=============๊ฐ๋จํ ์ค๋ชฉ=============");
System.out.println("ํ๋ ์ด์ด 1๋ถํฐ ์์ํ๋ฉฐ ๋ฐ๋ํ์ 1์ ํ๋ ์ด์ด1, 2๋ ํ๋ ์ด์ด2 ์
๋๋ค");
System.out.println("๋ฐ๋ํ์ 10x10์ด๋ฉฐ ํ๋ ์ด์ด1 ๋ถํฐ ์๋ ์์ํฉ๋๋ค");
System.out.println("===================================");
while(true)
{
Find f = new Find();
f.win();
if(i == 1)
{ System.out.println("๊ฒ์์ด ๋๋ฌ์ต๋๋ค");
if(count%2==0)
{
System.out.print("ํ๋ ์ด์ด1์ด ์ด๊ฒผ์ต๋๋ค");
}
else
{
System.out.print("ํ๋ ์ด์ด2๊ฐ ์ด๊ฒผ์ต๋๋ค");
}
break;
}
else if(count%2==1)
{
System.out.println("ํ๋ ์ด์ด1======================");
System.out.print("๋ช๋ฒ์งธ ํ์ ๋์๊ฒ ์ต๋๊น?: ");
int a = input.nextInt();
System.out.println();
System.out.print("๋ช๋ฒ์งธ ์ด์ ๋์๊ฒ ์ต๋๊น?: ");
int b = input.nextInt();
System.out.println("");
//์๋ฌ๋ฐฉ์ง
if(m.matrix[a-1][b-1] != 0)
{
System.out.println("์ด๋ฏธ ๋ ๊ณณ์ ๋ค์ ๋ ์ ์์ต๋๋ค");
continue;
}
m.matrix[a-1][b-1] = 1 ;
count++;
m.print();
System.out.println("=============================");
}
else if(count%2==0)
{
System.out.println("ํ๋ ์ด์ด2======================");
System.out.print("๋ช๋ฒ์งธ ํ์ ๋์๊ฒ ์ต๋๊น?: ");
int c = input.nextInt();
System.out.println("");
System.out.print("๋ช๋ฒ์งธ ์ด์ ๋์๊ฒ ์ต๋๊น?: ");
int d = input.nextInt();
System.out.println("");
//์๋ฌ๋ฐฉ์ง
if(m.matrix[c-1][d-1] != 0)
{
System.out.println("์ด๋ฏธ ๋ ๊ณณ์ ๋ค์ ๋ ์ ์์ต๋๋ค!");
continue;
}
m.matrix[c-1][d-1] = 2 ;
count++;
m.print();
System.out.println("=============================");
}
}
}
๋ฉ์ธ ๋ฉ์๋ ๊ธธ์ด๊ฐ ๊ต์ฅํ ๊ธธ๋ค. ์์งํ ๋ฉํ ๋ง์์ ์์ฑ์๋ ์์๊น์ง๋ง ๊ฒจ์ฐ ์ค๋ช
ํด์คฌ๋๋ฐ, ์ฝ๋๋ฅผ ๊ตณ์ด ์ ๋ฆฌํ ํ์์ฑ์ด ์๋ ์ถ์ด ์๊ฐ๋๋๋๋ก ๋ง ๋์ ์๋๋ ์ด๋ ๊ฒ ๋ฌ๋ค(?)....
๋จผ์ while ๋ฌดํ๋ฃจํ๋ฅผ ๋๋ ค์ ์ค๋ชฉ์ ๊ณ์ ์งํํ๊ฒ ๋ง๋ค์๋ค. ํ๋ ์ด์ด 1๊ณผ 2๋ก ๋๋์ด ์๊น ๋ง๋ count ๋ณ์๋ฅผ ํ/์ง์ผ๋ก ๊ตฌ๋ณํ์ฌ ์๋ณ๋๊ฒ๋ ์ ์ํ์๋ค. ์ด๋ฏธ ๋ ๊ณณ์ ์์ ์๋ฌ๋ฐฉ์ง๋ผ๋ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํด๋ ๊ฒ ์ฒ๋ผ ๋ง์๋จ๊ณ , ํ๋ ์ด์ด 1์ด ๋๋ฉด 1, 2๊ฐ ๋๋ฉด 2๋ก ํ์๋๊ฒ๋ ํด๋จ๋ค.
์ฝ๋์ ์ต์๋จ ๋ถ๋ถ์ ๋ณด๋ฉด Find ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ด ์๋๋ฐ ์ ๊ฒ ์์น ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฌ์ค๋ ๋ถ๋ถ์ด๋ค. ์๊น ์ ์ ์ผ๋ก matrix๋ฅผ ์ ์ธํ๋ ์ด์ ์ด๊ธฐ๋ ํ๋ค. Find์ ๊ทธ๋๋ก matrix ์ฐ๋ ค๊ณ ...
์ ์ด๋ ๋ด๊ฐ ์๊ณ ์๋ ์์น ํ์ ์๊ณ ๋ฆฌ์ฆ์ DFS,BFS,A-Star,๋ค์ต์คํธ๋ผ ๋ฑ์ด ์๋ ๊ฒ ๊ฐ๋ค. A-Star๋ ๋ด๊ฐ ์ด๋ฏธ ๋ด ๋ฒจ๋ก๊ทธ์ ๊ธฐ์ ํ๊ธฐ๋ ํ์๊ณ , ์ค๋์ ๊ทธ์ค
๊น๊ณ ์ด๋ ค์ด ์ค๋ช
์ ๋ชปํด์ฃผ๊ฒ ๋ค. ์๋๋ฉด ๋ ์ด๋ณด๋๊น...
๋์ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ง๊ด์ ์ผ๋ก ์์๋ณด๊ฒ๋ ์ฐ๋ ค๊ณ ๋
ธ๋ ฅํ๋ค.
์ด๋ ๊ฒ ์๊ธด ๋
ธ๋์ ๋ฃจํธ๋ค์ด ์๋ค๊ณ ์๊ฐํด๋ณด์. ์ฐธ๊ณ ๋ก ๋
ธ๋๋ ๋๊ทธ๋ผ๋ฏธ๊ณ ๋ฃจํธ๋ ์ ์ด๋ค.
์ด๋ฆ๋ถํฐ๊ฐ ๋์ด ์ฐ์ ํ์์ด๋ค. ๋ญ๊ฐ ๊น๊ฒ ๋ค์ด๊ฐ๋ค๊ธฐ ๋ณด๋ค๋ ์ซ wideํ๊ฒ ํ์ํด์ผ ํ ๊ฒ ๊ฐ์ ๋๋์ด ๋๋ ์ด๋ฆ์ด์ง ์์๊ฐ? ๊ทผ๋ฐ ๊ทธ๊ฒ ๋ง๋ค.
์ด๋ ๊ฒ ๋ฌธ์ด๋ฐ์์ผ๋ก ๋ง๊ตฌ ํ์์ ํ๋ ๊ฒ์ BFS(Breadth First Search) ๋ผ๊ณ ํ๋ค.
์ด์ฐ๊ตฌ์กฐ์์ ๋ฐฐ์ ๋๋ฐ, ์ฒซ๋ฒ์งธ ๋
ธ๋๋ฅผ ๋ฃจํธ ๋
ธ๋๋ผ๊ณ ํ๊ณ ๊ทธ ๋ค์ ์ ๋ฐ ์ฉ์ผ๋ก ์ญ~ ๋ญ๊ฐ ์ธต์ด ์๋ ๊ฒ์ฒ๋ผ ๋ชจ์ฌ์๋ ๋
ธ๋๋ค์ ์งํฉ์ Level 0์ด๋ผ๊ณ ๋ถ๋ฅด๊ณ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋๋ก ๊ฐ์๋ก ๋ ๋ฒจ1,2... ์ด๋ฐ์ฉ์ผ๋ก ์ฆ๊ฐํ๋ ๋๋์ผ๋ก ํํํ๋ค๊ณ ํ๋ค.
๊ทธ๋ผ DFS๋ ๋ญ๋?
๋์ด ์ฐ์ ํ์๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ญ๊ฐ ๊น์ํ ๋ค์ด๊ฐ์ ๋ค๋ฅธ ๋
ธ๋๋ค์ ๋ค ํด์น์ฐ๋ ๋๋? ์ด๊ฒ DFS๋ค.
์ง์ง ์ด๋ฆ ๊ทธ๋๋ก ๊น์ด ์ฐ์ ํ์์ด๊ธฐ ๋๋ฌธ์ ์ผ๋จ ๊น์ํ ๋ค์ด๊ฐ์ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ํ์ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ ์ค๋ฅธ์ชฝ์ด๋ ์ค๊ฐ๋ถํฐ ํ์ํ๋ฉด ์๋๋๊ณ ์๊ฐํ ์๋ ์๋๋ฐ, ์ผ๋จ ๋ด๊ฐ ๋ฐฐ์ด๋๋ก๋ผ๋ฉด ์ด์ฐ๊ตฌ์กฐ์์ DFS์ BFS๋ ์ผ์ชฝ์ ๊ธฐ์ค์ผ๋ก ํ์์ ํ๋๊ฒ ๊ธฐ๋ณธ ์์น์ด๋ค. ์๋๋ง๊ณ .
์ ๊ทธ๋ผ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ผ์ถ ์ ๋ฆฌ๋ฅผ ๋๋์ผ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
static final int[] dx = {-1,0,1,1};
static final int[] dy = {1,1,1,0};
static final int[] check = {-1, 5};
๋ณดํต BFS์ DFS๋ฅผ ์ฌ์ฉํ ๋๋ ์ํ์ข์ฐ๋ก ํ์ํ๊ฒ ๋๋ฏ๋ก ์์ ๊ฐ์ด dx,dy๋ฅผ ์ด์ฉํด ์ด๋ ๋ฐฉํฅ์ ๋ฏธ๋ฆฌ ์ ํด์ฃผ๋ฉด ์์ํ๋ค.
public void win() {
Omok_Main m = new Omok_Main();
int win = 0;
int[][] ba = new int[10][10];
for (int i = 0; i < ba.length; i++) {
for (int j = 0; j < ba[0].length; j++) {
ba[i][j] = m.matrix[i][j];
}
}
์ฌ๊ธฐ์ ba๋ Findํด๋์ค์ ํ์ ๋ ๋ฐฐ์ด์ด๋ฉฐ, matrix์ ๋ณต์ฌ๋ณธ์ด๊ธฐ๋ ํ๋ค. ๋ฐ๋ก matrix๋ก ๋๊ฒจ๋ฒ๋ฆฌ๋ฉด ๋ฉ์ธ ๋ฉ์๋์ ์ถฉ๋ํ ์ํ์ฑ ๋๋ฌธ์ ba๋ผ๋ ๋ฐฐ์ด๋ก ํ๋ฒ ๋๊ฒจ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉ์ํค๋๋ก ํ๋ค.
if(ba[x][y] == 1 || ba[x][y] ==2) {
int omok = ba[x][y];
here:for (int k = 0; k < dx.length; k++) {
x = i;
y = j;
for (int h = 0; h < 4; h++) {
x+=dx[k];
y+=dy[k];
if(x >=0 && x < ba.length && y >=0 && y < ba.length) {
if(ba[x][y] == omok) {
continue;
}else continue here;
}else continue here;
}
์ด ๋ถ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด๊ฐ๋ฉด์ BFS๋ฅผ ์ ์ฉ์์ผฐ๋ค. ์์งํ ๋งํด์ DFS์ BFS๋ฅผ ์ ์ฉ์ํฌ์๋ ์๋๋ฐ ๊ตณ์ด ์ ์ฉ์ํค๋ฉด์ ํด๊ฐ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ๋ค. Deque๊ฐ์ ๊ฑธ ์ธ ์ผ๋ ์๊ณ , ๊ทธ๋ฅ ๋จ์ํ dx์ dy๋ฅผ ์ค์ ํ๊ณ ์ํ์ข์ฐ ํ์์ ํ๋ ๊ฐ๋
์ด๋.
์ด์จ๋ ์ฝ๋ ์์ ์ ๋ง์น๊ณ ์คํ์ ํด๋ณด์๋ค.
๋ณด๋ค์ํผ ์๋์ด ์์ฃผ ์ ๋๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
ํ๊ฐ์ง ์ค์ ์ด ์๋ค๋ฉด ArrayIndexOutOfBoundsException์ด ๋ฐ๊บผ๊ฐ๊ธด ํ๋ฐ ๊ณ ์ ๋ํ๊ต 1ํ๋
ํ๋ก์ ํธ์ ์ค๋ช
ํด์ค๊ฑด ํด๋์ค/์์/์์ฑ์๊ฐ ๊ฑฐ์ ์ ๋ถ์ธ๋ฐ ๊ทธ๊ฒ ๋์์ธ๊ฐ. ์ผ์ถ ๊ตฌํ์์ผฐ๋ค๋ ๊ฑฐ์ ๋ง์กฑํ๊ณ try/catch๋ ์ฐ๊ธฐ ๊ท์ฐฎ์์ ๊ฒฐ๊ตญ ์์ผ๋ค..
์๋์ ์ฝ๋ ์ ๋ฌธ์ ์ฒจ๋ถํ๋ ์ธ์ ๊ฐ ์ฐธ๊ณ ํ ์ผ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค! ๋!
>Find ํด๋์ค
public class Find{
static final int[] dx = {-1,0,1,1};
static final int[] dy = {1,1,1,0};
static final int[] check = {-1, 5};
public void win() {
Omok_Main m = new Omok_Main();
int win = 0;
int[][] ba = new int[10][10];
for (int i = 0; i < ba.length; i++) {
for (int j = 0; j < ba[0].length; j++) {
ba[i][j] = m.matrix[i][j];
}
}
end:for (int i = 0; i < ba.length; i++) {
for (int j = 0; j < ba[0].length; j++) {
int x = i;
int y = j;
if(ba[x][y] == 1 || ba[x][y] ==2) {
int omok = ba[x][y];
here:for (int k = 0; k < dx.length; k++) {
x = i;
y = j;
for (int h = 0; h < 4; h++) {
x+=dx[k];
y+=dy[k];
if(x >=0 && x < ba.length && y >=0 && y < ba.length) {
if(ba[x][y] == omok) {
continue;
}else continue here;
}else continue here;
}
chk:for (int k2 = 0; k2 < check.length; k2++) {
int nx = i + check[k2]*dx[k];
int ny = j + check[k2]*dy[k];
if(nx >=0 && nx < ba.length && ny >=0 && ny < ba.length) {
if(ba[nx][ny] != omok) {
continue chk;
}continue here;
}
}
win = 1;
m.i = 1;
break end;
}
}
}
}
if(win != 1) m.i = 0;
}
}
>๋ฉ์ธ๋ฉ์๋
import java.lang.reflect.Array;
import java.util.*;
public class Omok_Main {
//๋ฐ๋ํ
static int [][] matrix = new int[10][10];
static int count;
static int i;
//์ถ๋ ฅ
void print()
{
for(int i=0;i<Array.getLength(matrix);i++)
{
System.out.print(Arrays.toString(matrix[i]));
System.out.println("");
}
}
//ํ์
//๋ฉ์ธ๋ฉ์๋
public static void main(String args[])
{
Omok_Main m = new Omok_Main();
Scanner input = new Scanner(System.in);
count++;
System.out.println("=============๊ฐ๋จํ ์ค๋ชฉ=============");
System.out.println("ํ๋ ์ด์ด 1๋ถํฐ ์์ํ๋ฉฐ ๋ฐ๋ํ์ 1์ ํ๋ ์ด์ด1, 2๋ ํ๋ ์ด์ด2 ์
๋๋ค");
System.out.println("๋ฐ๋ํ์ 10x10์ด๋ฉฐ ํ๋ ์ด์ด1 ๋ถํฐ ์๋ ์์ํฉ๋๋ค");
System.out.println("===================================");
while(true)
{
Find f = new Find();
f.win();
if(i == 1)
{ System.out.println("๊ฒ์์ด ๋๋ฌ์ต๋๋ค");
if(count%2==0)
{
System.out.print("ํ๋ ์ด์ด1์ด ์ด๊ฒผ์ต๋๋ค");
}
else
{
System.out.print("ํ๋ ์ด์ด2๊ฐ ์ด๊ฒผ์ต๋๋ค");
}
break;
}
else if(count%2==1)
{
System.out.println("ํ๋ ์ด์ด1======================");
System.out.print("๋ช๋ฒ์งธ ํ์ ๋์๊ฒ ์ต๋๊น?: ");
int a = input.nextInt();
System.out.println();
System.out.print("๋ช๋ฒ์งธ ์ด์ ๋์๊ฒ ์ต๋๊น?: ");
int b = input.nextInt();
System.out.println("");
//์๋ฌ๋ฐฉ์ง
if(m.matrix[a-1][b-1] != 0)
{
System.out.println("์ด๋ฏธ ๋ ๊ณณ์ ๋ค์ ๋ ์ ์์ต๋๋ค");
continue;
}
m.matrix[a-1][b-1] = 1 ;
count++;
m.print();
System.out.println("=============================");
}
else if(count%2==0)
{
System.out.println("ํ๋ ์ด์ด2======================");
System.out.print("๋ช๋ฒ์งธ ํ์ ๋์๊ฒ ์ต๋๊น?: ");
int c = input.nextInt();
System.out.println("");
System.out.print("๋ช๋ฒ์งธ ์ด์ ๋์๊ฒ ์ต๋๊น?: ");
int d = input.nextInt();
System.out.println("");
//์๋ฌ๋ฐฉ์ง
if(m.matrix[c-1][d-1] != 0)
{
System.out.println("์ด๋ฏธ ๋ ๊ณณ์ ๋ค์ ๋ ์ ์์ต๋๋ค!");
continue;
}
m.matrix[c-1][d-1] = 2 ;
count++;
m.print();
System.out.println("=============================");
}
}
}
}