달팽이 모양으로 숫자 넣는 문제
어느부분에서 방향을 바꾸고 / 기존의 값에 덮어쓰지 않게 하는것이 포인트
근데 메모리공간이랑 시간이 너무 걸려서 좀 다시 짜봐야할듯
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int w = scan.nextInt();
int[][] arr = new int[w+1][w+1];
int findn = scan.nextInt();
int[] x = {1,0,-1,0};
int[] y = {0,1,0,-1};
int now = 0; // x y배열 방향조절하는 숫자 0: 다운 1:오른쪽 2:업 3:왼쪽
int nx = 1; //현재 위치 x
int ny = 1; //현재 위치 y
int num = w*w; // 전체돌았는지 확인, 값 넣는 변수
int fx = 1; //찾으려는 숫자 위치값 x
int fy = 1; //찾으려는 숫자 위치값 y
while(num > 0) {
arr[nx][ny] = num;
if(num == findn) {
fx = nx;
fy = ny;
}
if(nx+x[now] >= arr.length || ny+y[now] >= arr.length || nx+x[now] < 1 || ny+y[now] < 1 || arr[nx+x[now]][ny+y[now]] != 0) {
//방향전환 범위를 벗어날경우(4), 그 다음칸이 0이 아닌 경우(덮어쓰면 안되니까)
if(now == 3 ) { now = 0; }
else { now += 1;}
}
nx += x[now];
ny += y[now];
num--;
}
////////// 답 출력
for(int i=1;i<w+1;i++) {
for(int j=1;j<w+1;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
System.out.println(fx+" "+fy);
}
}
'개발공부 > 백준 뽀개기' 카테고리의 다른 글
[백준 11047][자바] 동전 0 (0) | 2020.11.09 |
---|---|
[백준 2589] 보물섬 (0) | 2020.05.22 |
[백준] 런타임 에러 해결방법 (0) | 2020.05.22 |
[백준 1260][자바] DFS와 BFS (0) | 2020.05.21 |
[백준 11729][자바] 하노이 탑 순서 (0) | 2020.05.19 |