코드트리 문제풀이

양수 직사각형의 최대 크기

내 풀이

  • 좌상단과 우하단 꼭지점을 통해 사각형의 사이즈를 구해서 비교하면 되는 쉬운 문제다.
import java.util.*;

public class Main {
    static int n, m;
    static int ans = -1;
    static int[][] grid;

    public static void main(String[] args) {
        init();

        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                solve(i, j);
            }
        }

        System.out.println(ans);
    }

    public static void solve(int row, int col) {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                checkSize(row, col, i, j);
            }
        }
    }

    public static void checkSize(int x1, int y1, int x2, int y2) {
        int size = 0;

        for(int i = x1; i <= x2; i++) {
            for(int j = y1; j <= y2; j++) {
                if(grid[i][j] <= 0) return;
                size++;
            }
        }

        if(size > 0) {
            ans = Math.max(ans, size);
        }
    }

    public static void init() {
        Scanner sc = new Scanner(System.in);

        n = sc.nextInt();
        m = sc.nextInt();
        grid = new int[n][m];

        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                grid[i][j] = sc.nextInt();
            }
        }
    }
}

합쳐지는 구슬들

내 풀이

  • Switch Case문에서 break를 빠뜨려서 고생했다... ㅎ
import java.util.*;

public class Main {
    static int n, m, t;
    static int[] ans = new int[2];
    static int[] dx = {0, 1, 0, -1};
    static int[] dy = {1, 0, -1, 0};
    static Bead[] beads;
    static int[][] grid;

    public static void main(String[] args) {
        init();

        while(t-- > 0) {
            move();
            check();
        }

        System.out.println(ans[0] + " " + ans[1]);
    }

    public static void check() {
        for(int i = 1; i <= m; i++) {
            if(beads[i] == null) continue;

            Bead bead = beads[i];
            int x = bead.row;
            int y = bead.col;

            if(grid[x][y] != 0) {
                Bead bead2 = beads[grid[x][y]];

                int bigNum;
                int newDir;
                int newWeight = bead.weight + bead2.weight;

                if(bead.num > bead2.num) {
                    bigNum = bead.num;
                    newDir = bead.dir;
                    beads[bead2.num] = null;
                } else {
                    bigNum = bead2.num;
                    newDir = bead2.dir;
                    beads[bead.num] = null;
                }

                beads[bigNum] = new Bead(bigNum, x, y, newDir, newWeight);
                ans[0]--;
                ans[1] = Math.max(ans[1], newWeight);
                grid[x][y] = bigNum;
                continue;
            }
            grid[x][y] = bead.num;
        }
    }

    public static void move() {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                if(grid[i][j] == 0) continue;
                int num = grid[i][j];
                Bead bead = beads[num];
                int nx = i + dx[bead.dir];
                int ny = j + dy[bead.dir];

                if(inRange(nx, ny)) {
                    bead.row = nx;
                    bead.col = ny;
                } else {
                    bead.dir = (bead.dir + 2) % 4;
                }

                grid[i][j] = 0;
            }
        }
    }

    public static boolean inRange(int x, int y) {
        if (0 <= x && x < n && 0 <= y && y < n) return true;
        return false;
    }

    public static void init() {
        Scanner sc = new Scanner(System.in);

        n = sc.nextInt();
        m = sc.nextInt();
        t = sc.nextInt();
        grid = new int[n][n];
        beads = new Bead[m + 1];
        ans[0] = m;

        for(int i = 1; i <= m; i++) {
            int r = sc.nextInt() - 1;
            int c = sc.nextInt() - 1;
            String d = sc.next();
            int dir = 0;
            switch(d) {
                case "R":
                    dir = 0;
                    break;
                case "D":
                    dir = 1;
                    break;
                case "L":
                    dir = 2;
                    break;
                case "U":
                    dir = 3;
                    break;
            }
            int w = sc.nextInt();

            beads[i] = new Bead(i, r, c, dir, w);
            grid[r][c] = i;
            ans[1] = Math.max(ans[1], w);
        }

    }

    public static class Bead {
        int num;
        int row;
        int col;
        int dir;
        int weight;

        public Bead(int num, int row, int col, int dir, int weight) {
            this.num = num;
            this.row = row;
            this.col = col;
            this.dir = dir;
            this.weight = weight;
        }
    }
}

+ Recent posts