Algorithm/baekjoon

배열 돌리기 1

마닐라 2022. 2. 21. 13:39

📍 문제 설명

 

💡 접근

문제에서 주어진대로 구현했다.

타 블로그는 방향을 설정하여 범위를 벗어났을 때 방향을 전환해주는 식으로 작성했는데 이렇게 푸는 방식이 문제의 의도에 좀 더 부합한 답인듯하다.

 

👩‍💻 코드

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

public class Main {
    static int n, m, v, e, k, r, answer, cnt;
    static int[] arr;
    static long[] dp;
    static int[][] board, result;
    static boolean[][] visited;
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    static ArrayList<Integer> list;
    static StringBuilder sb;
    static Queue<Integer> q;
    public static void main(String[] args) throws IOException {
        Main T = new Main();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        r = Integer.parseInt(st.nextToken());
        board = new int[n+1][m+1];
        result = new int[n+1][m+1];
        for(int i = 1; i <= n; i++) {
            st = new StringTokenizer(br.readLine());
            for(int j = 1; j <= m; j++) {
                board[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        sb = new StringBuilder();

        T.solution();

        for(int i = 1; i <= n; i++) {
            for(int j = 1; j <= m; j++){
                sb.append(board[i][j] + " ");
            }
            sb.append("\n");
        }

        System.out.println(sb);

    }

    private void solution() {


        for (int tc = 0; tc < r; tc++) {
            int[][] result = new int[n + 1][m + 1];//4 5
            int startX = 1;
            int startY = 1;
            int endX = n;
            int endY = m;
            while (startX < endX && startY < endY) {
                //left, right
                for (int i = startX; i < endY; i++) {
                    result[startX][i] = board[startX][i + 1];
                    result[endX][i + 1] = board[endX][i];
                }

                //down
                for (int i = startX; i < endX; i++) {
                    result[i + 1][startX] = board[i][startX];
                }

                //up
                for (int i = endX - 1; i >= startX; i--) {
                    result[i][endY] = board[i + 1][endY];
                }
                startX++;
                startY++;
                endX--;
                endY--;

            }
            board = result;
        }
    }

    private static class Point implements Comparable<Point> {
        private int x;
        private int y;
        private int crush;

        public Point(int x, int y, int crush) {
            this.x = x;
            this.y = y;
            this.crush = crush;
        }

        @Override
        public String toString() {
            return "Point{" +
                    "x=" + x +
                    ", y=" + y +
                    ", crush=" + crush +
                    '}';
        }

        @Override
        public int compareTo(Point o) {
            return this.crush - o.crush;
        }
    }
}

'Algorithm > baekjoon' 카테고리의 다른 글

드래곤커브  (0) 2022.02.21
주사위 굴리기  (0) 2022.02.21
배열 돌리기 3  (0) 2022.02.20
알고스팟  (0) 2022.02.20
이모티콘  (0) 2022.02.20