[BOJ] 15685 드래곤커브

알파·2022년 7월 25일
0

각 좌표를 시계방향으로 돌리게 되면 이전 세대 커브의 역순 좌표의 방향의 1씩 더한 것으로 방향이 바뀌게 된다.
이걸 어떻게 알아내지.........
그래서 세대마다 모든 좌표의 방향값을 추가해준다.
그리고 방향 배열을 돌면서 시뮬레이션을 돌려주면 된다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Solution15685 {
    static boolean[][] map;
    static int[] dx = {0, -1, 0, 1};
    static int[] dy = {1, 0, -1, 0};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        map = new boolean[101][101];
        StringTokenizer st;
        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            int d = Integer.parseInt(st.nextToken());
            int g = Integer.parseInt(st.nextToken());
            dragon(x, y, d, g);
        }
        int ans = 0;
        for(int i = 0; i < 100; i++) {
            for(int j = 0; j < 100; j++) {
                if(map[i][j] && map[i][j+1] && map[i+1][j] && map[i+1][j+1]){
                    ans++;
                }
            }
        }
        System.out.println(ans);
    }

    static void dragon(int x, int y, int d, int g) {
        ArrayList<Integer> dir= new ArrayList<>();
        dir.add(d);
        for(int i = 0; i < g; i++){
            for(int j = dir.size() - 1; j >= 0; j--) {
                dir.add((dir.get(j)+1) % 4);
            }
        }
        map[y][x] = true;
        for(int i = 0; i < dir.size(); i++) {
            y += dx[dir.get(i)];
            x += dy[dir.get(i)];
            map[y][x] = true;
        }
    }

}
profile
I am what I repeatedly do

0개의 댓글