본문 바로가기

개발공부/백준 뽀개기

[백준 1913][자바] 달팽이

달팽이 모양으로 숫자 넣는 문제

 

어느부분에서 방향을 바꾸고 / 기존의 값에 덮어쓰지 않게 하는것이 포인트

 

근데 메모리공간이랑 시간이 너무 걸려서 좀 다시 짜봐야할듯


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);
		
		
	}
}

www.acmicpc.net/problem/1913

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

www.acmicpc.net