설계보고 코드치다가, 사이즈 부분에서 고민하기 싫어서 배열 크기를 많이 주고 풀었다.
import java.util.Scanner;
public class Main{
public static int[][] arr;
public static int sero;
public static int garo;
public static int target;
public static int[] dx = new int[]{0,1,0,-1};
public static int[] dy = new int[]{1,0,-1,0};
public static void main(String[] args){
// 나선형 / 나선은 (1,1)에서 시작 (1,1~6)(2~7,6)(7,6~1)만나면 또 돌고
// (1,6) (2,6) (3,6) (4,6) ... (7,6)
// (1,5)
// (1,4)
// (1,3)
// (1,2)
// (1,1)
// 입력볌위: 5<= 가로,세로 <=1000
// 입력: 7 6
// 12
// 출력 : 12의 좌표(가로,세로)
// 이해 : 1,1이 왼쪽위로 오게 만들자
// 그렇다면 처음 입력받는것을 sero, 두번째 입력받는 것을 garo로 하고
// [0] sero ,garo 를 입력받는다.
// [0-1] target을 입력받는다. 만약 타겟 값이 세로*가로 값보다 크면 0 출력하고 종료
// v [1] arr[sero+2][garo+2]로 만들어주자 (배열 생성)
// v [2] 테두리는 -1로 만들어준다. (4개 초기화)
// v [3] (중요) dx[],dy[]를 만들어준다.(4방향) (오른쪽,아래,왼쪽,위) 순서로 생성
// [4] while문 사용, cx=1,cy=1,v=1;arr[cx][cy]=1,int idx=0;
// [5] arr[cx+dx[idx][cy+dx[idx]]의 값이 0이면 이동, cx = cx+dx[i],cy = cy+dy[i] / v값을 넣어주고 1만큼 늘려준다.
// [6] 그게 아니면 i의 값을 모듈 연산 해줌
// [7] 만약 v == 세로* 가로 값에 도달하면 종료 시킨다.
// [8] 이중 포문을 돌려서 좌표값을 찾는다.
Scanner scan = new Scanner(System.in);
sero = scan.nextInt();
garo = scan.nextInt();
target = scan.nextInt();
if(target>sero*garo)
{
System.out.println(0);return;
}
arr = new int[1020][1020];
init();
int cx = 1;int cy=1;int v=1;arr[cx][cy]=1;int idx=0;
while(true)
{
if( arr[ cx+dx[idx] ][cy+dy[idx] ]==0)
{
// System.out.println(cx+" "+cy);
cx = cx+dx[idx];
cy = cy+dy[idx];
arr[cx][cy]=++v;
}
else
{
idx=(idx+1)%4;
}
// if(v>=40)printArr();
if(v>=sero*garo)break;
}
printArr();
int px=0;
int py=0;
for(int i=1;i<=sero;i++)
{
for(int j=1;j<=garo;j++)
{
if(arr[i][j]==target)
{
px = i;py=j;
}
}
}
System.out.println(px+" "+py);
scan.close();
}
public static void init()
{
// | |
for(int i=0;i<=sero+1;i++)
{
arr[i][0]=-1; //(0,0)(1,0)(2,0)(3,0)(4,0)(5,0)
arr[i][garo+1]=-1;//(0,7)(1,7)(2,7)(3,7)(4,7)(5,7)
}
// - (0~7)
for(int i=0;i<=garo+1;i++)
{
arr[0][i]=-1;//(0,0)(0,1)(0,2)(0,3)(0,4)(0,5)(0,6)(0,7)
arr[sero+1][i]=-1;
}
}
public static void printArr()
{
for(int i=0;i<=sero+2;i++)
{
for(int j=0;j<=garo+2;j++)
{
System.out.print(arr[i][j]+" ");
}System.out.println();
}
}
}