백준 1913 - 달팽이 (자바)

남현·2025년 1월 19일

백준

목록 보기
3/16

문제

풀이

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int search = sc.nextInt();
		sc.close();
		
		int[][] arr = new int[num][num];
		int x = num / 2;
		int y = num / 2;
		int dir = 0; //방향 (0: 위 1: 오른쪽 2: 아래 3: 왼쪽)
		int steps = 1; // 한 방향으로 이동할 거리
		int value = 1;
		
		arr[x][y] = value;
		// 배열 채우기
		while(value < num * num) {
			for(int i=0; i<2; i++) {
				for(int j=0; j<steps; j++) {
					if(value == num*num) break;
					value++;
					switch(dir) {
					case 0: x--; break;
					case 1: y++; break;
					case 2: x++; break;
					case 3: y--; break;
					}
					arr[x][y] = value;
				}
				dir = (dir + 1) % 4;
			}
			steps++;
		}
        // 값의 위치 찾기
		int searchX = -1, searchY = -1;
		for(int i=0; i<num; i++) {
			for(int j=0; j<num; j++) {
				System.out.print(arr[i][j] + " ");
				if(arr[i][j] == search) {
					searchX = i+1;
					searchY = j+1;
				}
			}
			System.out.println();
		}
		System.out.println(searchX + " " + searchY);
	}
}

초기 값을 배열의 중앙에서 시작하게 위치 while문에서 위->오른쪽->아래->왼쪽 순으로 방향을 반복해주면서 배열을 채운다. 배열을 출력하면서 search 값이 있는 위치를 확인 한 후 좌표를 출력한다.

profile
백엔드 호소인

0개의 댓글