Algorithm/Baekjoon

[Algorithm/Baekjoon] ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ - 20056 (G4/JAVA)

dpdms2148 2023. 7. 17. 22:43
728x90

๐Ÿ“‘๋ฌธ์ œ๋งํฌ

 

20056๋ฒˆ: ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ

์ฒซ์งธ ์ค„์— N, M, K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ํŒŒ์ด์–ด๋ณผ์˜ ์ •๋ณด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ํŒŒ์ด์–ด๋ณผ์˜ ์ •๋ณด๋Š” ๋‹ค์„ฏ ์ •์ˆ˜ ri, ci, mi, si, di๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ํŒŒ์ด์–ด๋ณผ์˜ ์œ„์น˜

www.acmicpc.net

๐Ÿ’ป์ฝ”๋“œ

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

public class BJ_G4_20056 {
    public static class Fireball {
        int r;
        int c;
        int m;
        int s;
        int d;

        Fireball(int r, int c, int m, int s, int d) {
            this.r = r;
            this.c = c;
            this.m = m;
            this.s = s;
            this.d = d;
        }
    }

    static int N, M, K;
    static ArrayList<Fireball> map[][];
    static ArrayList<Fireball> fireballList = new ArrayList<>();
    static int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
    static int dy[] = {0, 1, 1, 1, 0, -1, -1, -1};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        map = new ArrayList[N][N];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                map[i][j] = new ArrayList<>();
            }
        }

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());
            int r = Integer.parseInt(st.nextToken()) - 1;
            int c = Integer.parseInt(st.nextToken()) - 1;
            int m = Integer.parseInt(st.nextToken());
            int s = Integer.parseInt(st.nextToken());
            int d = Integer.parseInt(st.nextToken());

            map[r][c].add(new Fireball(r, c, m, s, d));
            fireballList.add(new Fireball(r, c, m, s, d));
        }

        for (int k = 0; k < K; k++) {
            // 1. ํŒŒ์ด์–ด๋ณผ ์ด๋™
            moveFireball();

            // 2. 2๊ฐœ ์ด์ƒ ํŒŒ์ด์–ด๋ณผ์ด ์žˆ๋Š” ์นธ
            combineFireball();

            // fireballList ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ธฐ
            makeFireballList();
        }

        int answer = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (map[i][j].size() > 0) {
                    for (Fireball fireball : map[i][j]) {
                        answer += fireball.m;
                    }
                }
            }
        }
        System.out.println(answer);
    }

    private static void makeFireballList() {
        fireballList = new ArrayList<>();
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (map[i][j].size() > 0) {
                    for (Fireball fireball : map[i][j]) {
                        fireballList.add(fireball);
                    }
                }
            }
        }
    }

    private static void combineFireball() {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if (map[i][j].size() >= 2) {
                    // 2-1. ํŒŒ์ด์–ด๋ณผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ธฐ
                    int m = 0;
                    int s = 0;
                    int even = 0;
                    int odd = 0;
                    for (Fireball fireball : map[i][j]) {
                        m += fireball.m;
                        s += fireball.s;
                        if (fireball.d % 2 == 0) even++;
                        else odd++;
                    }

                    m /= 5;
                    s /= map[i][j].size();

                    map[i][j] = new ArrayList<>();
                    if (m == 0) continue;

                    boolean flag = false;
                    if (even == 0 || odd == 0) {
                        flag = true;
                    }

                    // 2-2. ํŒŒ์ด์–ด๋ณผ 4๊ฐœ๋กœ ๋‚˜๋ˆ„๊ธฐ
                    if (flag) {// ๋ชจ๋‘ ํ™€์ˆ˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์ง์ˆ˜
                        for (int dd = 0; dd < 8; dd += 2) {
                            map[i][j].add(new Fireball(i, j, m, s, dd));
                        }
                    } else {
                        for (int dd = 1; dd < 8; dd += 2) {
                            map[i][j].add(new Fireball(i, j, m, s, dd));
                        }
                    }
                }

            }
        }
    }

    private static void moveFireball() {
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                map[i][j] = new ArrayList<>();
            }
        }
        for (Fireball fireball : fireballList) {
            fireball.r = (fireball.r + (dx[fireball.d] + N) * fireball.s) % N;
            fireball.c = (fireball.c + (dy[fireball.d] + N) * fireball.s) % N;

            map[fireball.r][fireball.c].add(fireball);
        }
    }
}

โณํšŒ๊ณ 

  • ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ˆœ์„œ์™€ for๋ฌธ์—์„œ break/continue ๋กœ์ง์ด ํ—ท๊ฐˆ๋ ค์„œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š”๋ฐ ํ•œ์ฐธ ๊ฑธ๋ ธ๋‹ค.
728x90