-
[ SWEA ] 1954Java/코딩테스트 2023. 5. 19. 18:19
달팽이 숫자 문제
한 방향으로 쭉 -> 가고 더이상 못가면 방향을 전환하는 방법으로 푼다.
isValid() 함수로 검사 + 해당 칸의 값이 0인지 확인 -> 아닐 경우 방향을 전환
이 때 isValid로 먼저 검사해야한다. map[x+dirX[dir]][y+dirY[dir]]를 먼저 조건의 앞에 넣어두면 벽 벗어나는 칸일 경우 바로 ArrayOutOfBound 뜨기 때문.
각 칸에는 1~n*n의 숫자를 채워넣기.
import java.util.*; public class Solution { static int[] dirX = { 0, 1, 0, -1 }; static int[] dirY = { 1, 0, -1, 0 }; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int test = sc.nextInt(); for (int t = 1; t <= test; t++) { int n = sc.nextInt(); int[][] map = new int[n][n]; int x = 0; int y = 0; int dir = 0; for (int i = 1 ; i <= n*n; i++) { map[x][y] = i; if (!isValid(x + dirX[dir], n) || !isValid(y + dirY[dir], n) || map[x + dirX[dir]][y + dirY[dir]] != 0 ) { dir = (dir + 1) % 4; } x = x + dirX[dir]; y = y + dirY[dir]; } System.out.println("#" + t); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(map[i][j] + " "); } System.out.println(""); } } } public static boolean isValid(int pos, int n) { if (pos >= n || pos < 0 ) { return false; } return true; } }
'Java > 코딩테스트' 카테고리의 다른 글
프로그래머스 도둑질 - Java (0) 2023.05.26 백준 7569, 2573 - Java (0) 2023.05.26 [ SWEA ] 1204, 1206, 9611 (0) 2023.05.17 HackerRank - PriorityQueue (0) 2023.05.11 프로그래머스 여행경로 Java (0) 2023.05.04