[JAVA] 백준 1913번 : 달팽이

조예빈·2024년 9월 19일
0

Coding Test

목록 보기
138/146

https://www.acmicpc.net/problem/1913

반례

입력

3
1

정답

9 2 3
8 1 4
7 6 5
2 2

위의 반례를 찾지 못해서 시간이 많이 소요되었다. 위의 반례의 경우에는 while문이 돌기 전의 조건(arr[rowStart][colStart] = num++;의 조건)이므로 내가 따로 지정을 해 주어야 한다.

package silver3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class num1913 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int inputNum = Integer.parseInt(br.readLine());
        int num = 1; // 시작 수
        int[][] arr = new int[N][N];
        int x = 0;
        int y = 0;

        int rowStart = N / 2;
        int colStart = N / 2;

        arr[rowStart][colStart] = num++;
        if (arr[rowStart][colStart] == inputNum) {
            x = N / 2;
            y = N / 2;
        }
        int steps = 1; // 나선의 초기 크기

        while (num <= N * N) {
            for (int i = 0; i < steps; i++) {
                if (num > N * N) {
                    break;
                }
                rowStart--; //위로
                arr[rowStart][colStart] = num++;
                if (arr[rowStart][colStart] == inputNum) {
                    x = rowStart;
                    y = colStart;
                }
            }

            for (int i = 0; i < steps; i++) {
                if (num > N * N) {
                    break;
                }
                colStart++; //오른쪽으로
                arr[rowStart][colStart] = num++;
                if (arr[rowStart][colStart] == inputNum) {
                    x = rowStart;
                    y = colStart;
                }
            }
            steps++;

            for (int i = 0; i < steps; i++) {
                if (num > N * N) {
                    break;
                }
                rowStart++; //아래로
                arr[rowStart][colStart] = num++;
                if (arr[rowStart][colStart] == inputNum) {
                    x = rowStart;
                    y = colStart;
                }
            }

            for (int i = 0; i < steps; i++) {
                if (num > N * N) {
                    break;
                }
                colStart--; //왼쪽으로
                arr[rowStart][colStart] = num++;
                if (arr[rowStart][colStart] == inputNum) {
                    x = rowStart;
                    y = colStart;
                }
            }
            steps++;
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println((x + 1) + " " + (y + 1));
    }
}

profile
컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다. -마틴 파울러

0개의 댓글