[BOJ] 백준 1913 - 달팽이

Lynn·2021년 1월 11일
0

Algorithm

목록 보기
13/43
post-thumbnail

👩🏻‍💻 문제

👩🏻‍💻 정답 코드

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException, NoSuchElementException {
        Scanner s = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = s.nextInt();
        int find = s.nextInt();
        int[][] arr = new int[n][n];

        int a = n / 2, b = n / 2;
        int level = 1;
        int num = 1;
        int x = 0, y = 0;

        while (true) {
            for (int i = 0; i < level; i++) {
                arr[a][b] = num++;
                a--;
            }
            if ((num - 1) == n * n) break;
            for (int i = 0; i < level; i++) {
                arr[a][b] = num++;
                b++;
            }
            level++;
            for (int i = 0; i < level; i++) {
                arr[a][b] = num++;
                a++;
            }
            for (int i = 0; i < level; i++) {
                arr[a][b] = num++;
                b--;
            }
            level++;
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                bw.write(arr[i][j] + " ");
                if (find == arr[i][j]) {
                    x = i + 1;
                    y = j + 1;
                }
            }
            bw.newLine();
        }
        bw.write(x + " " + y);
        bw.flush();
    }
}


n이 3일 때를 그리고 1부터 방향을 화살표로 표시해봤다. 같은 방향으로 한 번 = level 1, 두 번 = level 2 이렇게 해서 각 방향별로 level로 for문을 돌렸고 한 싸이클이 다 돌고나면 arr[0][0]까지 채운 후 while문에서 break했다.

처음에 시간 초과가 뜨길래 Scanner를 BufferedReader로, Println을 BufferedWriter로 다시 짰는데 자꾸 런타임 에러가 나서... 스캐너만 다시 그대로 돌려놓고 프린트만 버퍼로 했더니 맞았다고 뜬다.

... 처참한 내 제출 기록
저거 NoSuchElement 진짜 해결 못하겠다고 ㅠㅠ 왤까... 앞으로는 애초에 BufferedReader로 짠다


👩🏻‍💻 Remember

버퍼 입출력 공부하고 활용하자...

profile
wanderlust

0개의 댓글

관련 채용 정보