[BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ

2025. 10. 15. 14:42ยท๐Ÿ’ญ Problem Solving/Java

๋ฌธ์ œ

https://www.acmicpc.net/problem/20056

 

๋ฌธ์ œ ์ดํ•ด

  • N×N ๊ฒฉ์ž์—์„œ ํŒŒ์ด์–ด๋ณผ๋“ค์ด K๋ฒˆ ์ด๋™·ํ•ฉ์ฒด·๋ถ„๋ฆฌ๋œ๋‹ค.
  • ๊ฐ ํŒŒ์ด์–ด๋ณผ: ์œ„์น˜ (r,c), ์งˆ๋Ÿ‰ m, ์†๋ ฅ s, ๋ฐฉํ–ฅ d(0~7).
  • ํ•œ ์นธ์— 2๊ฐœ ์ด์ƒ ๋ชจ์ด๋ฉด ํ•˜๋‚˜๋กœ ํ•ฉ์นœ ๋’ค 4๊ฐœ๋กœ ๋ถ„๋ฆฌ
    • ์ƒˆ ์งˆ๋Ÿ‰ = ⌊(ํ•ฉ ์งˆ๋Ÿ‰)/5⌋ (0์ด๋ฉด ์†Œ๋ฉธ)
    • ์ƒˆ ์†๋ ฅ = ⌊(ํ•ฉ ์†๋ ฅ)/๊ฐœ์ˆ˜⌋
    • ์ƒˆ ๋ฐฉํ–ฅ: ๋ชจ๋‘ ์ง/ํ™€๋งŒ ์žˆ์—ˆ์œผ๋ฉด {0,2,4,6}, ์„ž์—ฌ ์žˆ์œผ๋ฉด {1,3,5,7}

 

๊ตฌํ˜„ ํ๋ฆ„

  1. ์ž…๋ ฅ
    • fireBall ๋ฆฌ์ŠคํŠธ์— ๋ชจ๋“  ํŒŒ์ด์–ด๋ณผ ์ €์žฅ
    • map[r][c]์—๋Š” ํ•ด๋‹น ์นธ์— ์กด์žฌํ•˜๋Š” ํŒŒ์ด์–ด๋ณผ ์ €์žฅ
  2. K๋ฒˆ ๋ฐ˜๋ณต
    • ์ด๋™ move()
      • ๋ชจ๋“  ํŒŒ์ด์–ด๋ณผ์„ ๋ฐฉํ–ฅ·์†๋ ฅ๋Œ€๋กœ ์ด๋™
      • ์ด๋™ ํ›„ map์— ์‚ฝ์ž…
    • ํ•ฉ์ฒด ํ›„ 4๋ถ„๋ฆฌ divide(int r, int c)
      • map[i][j] >= 2์ธ ์นธ๋งŒ divide(i, j) ์ˆ˜ํ–‰
      • map ์ดˆ๊ธฐํ™”
  3. ์ถœ๋ ฅ
    • calcSum()๋กœ ๋‚จ์€ ๋ชจ๋“  ํŒŒ์ด์–ด๋ณผ์˜ ์งˆ๋Ÿ‰ ํ•ฉ ์ถœ๋ ฅ

 

ํ•จ์ˆ˜๋ณ„ ์ƒ์„ธ ๊ธฐ๋Šฅ

move(): ํŒŒ์ด์–ด๋ณผ ์ด๋™

๋ฐฉํ–ฅ d๋กœ s์นธ ์ด๋™. ๊ฒฉ์ž์˜ ๋ฒ”์œ„, ์Œ์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ (r + dr[d] * (s % n) + n) % n๋กœ ์ฒ˜๋ฆฌ

  • s % n: s์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ถ•์†Œ

 

divide(int r, int c): ํ•ฉ์ฒด ํ›„ 4๋ถ„๋ฆฌ

  • map์˜ ํ•ด๋‹น ์นธ์„ ํ•œ ๋ฒˆ ์ˆœํšŒํ•˜๋ฉฐ, ์งˆ๋Ÿ‰ ํ•ฉ (m), ์†๋ ฅ ํ•ฉ (s), ํŒŒ์ด์–ด๋ณผ ๊ฐœ์ˆ˜ ํ•ฉ (cnt), ์ง/ํ™€ ์—ฌ๋ถ€ (even/odd) ์ง‘๊ณ„
  • ํ•ฉ์ฒด๋œ ํŒŒ์ด์–ด๋ณผ ์ œ๊ฑฐ: fireBall.remove(cur)
  • ์ง‘๊ณ„ ํ›„ map ์ดˆ๊ธฐํ™”
  • ์ƒˆ ์งˆ๋Ÿ‰, ์†๋ ฅ, ๋ฐฉํ–ฅ ๊ตฌํ•˜๊ธฐ
    • ์ƒˆ ์งˆ๋Ÿ‰: m /= 5 (0์ด๋ฉด ์†Œ๋ฉธ)
    • ์ƒˆ ์†๋ ฅ: s /= cnt
    • ์ง/ํ™€ ์„ž์ž„ ์—ฌ๋ถ€(odd && even)์— ๋”ฐ๋ผ ๋ฐฉํ–ฅ ์ง‘ํ•ฉ์„ {0,2,4,6} ๋˜๋Š” {1,3,5,7}์œผ๋กœ 4๊ฐœ ์ƒ์„ฑํ•ด fireBall์— ์ถ”๊ฐ€

 

calcSum(): ๋‚จ์€ ์งˆ๋Ÿ‰ ํ•ฉ์‚ฐ

  • fireBall ๋ฆฌ์ŠคํŠธ ์ˆœํšŒํ•˜๋ฉฐ m์„ ๋ˆ„์ ํ•ด์„œ ๋ฆฌํ„ด

 

์ฝ”๋“œ

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

public class Main {
	static class FireBall {
		int r, c, m, s, d;

		public 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;
	static ArrayList<FireBall>[][] map;
	static ArrayList<FireBall> fireBall;
	static int[] dr = { -1, -1, 0, 1, 1, 1, 0, -1 };
	static int[] dc = { 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());
		int m = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		map = new ArrayList[n][n];
		fireBall = new ArrayList<>();

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

		while (m-- > 0) {
			st = new StringTokenizer(br.readLine());
			int r = Integer.parseInt(st.nextToken()) - 1;
			int c = Integer.parseInt(st.nextToken()) - 1;
			fireBall.add(new FireBall(r, c, Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()),
					Integer.parseInt(st.nextToken())));
		} // ์ž…๋ ฅ ๋

		while (k-- > 0) { // ๋ช…๋ น
			move();

			// ํŒŒ์ด์–ด๋ณผ ๋ถ„๋ฆฌ & map ์ดˆ๊ธฐํ™”
			for (int i = 0; i < n; i++) {
				for (int j = 0; j < n; j++) {
					if (map[i][j].size() < 2) {
						map[i][j].clear();
						continue;
					}
					divide(i, j);
				}
			}
		}

		System.out.println(calcSum());
	}

	static void move() { // ํŒŒ์ด์–ด๋ณผ ์ด๋™
		for (FireBall f : fireBall) {
			f.r = (f.r + n + dr[f.d] * (f.s % n)) % n;
			f.c = (f.c + n + dc[f.d] * (f.s % n)) % n;
			map[f.r][f.c].add(f);
		}
	}

	static void divide(int r, int c) { // ํŒŒ์ด์–ด๋ณผ ๋ถ„๋ฆฌ
		int m = 0, s = 0, cnt = map[r][c].size();
		boolean odd = false, even = false;

		for (FireBall cur : map[r][c]) {
			m += cur.m;
			s += cur.s;
			if (cur.d % 2 == 0)
				even = true;
			else
				odd = true;

			fireBall.remove(cur);
		}
		map[r][c].clear();

		m /= 5;
		if (m == 0) { // ์†Œ๋ฉธ
			return;
		}

		s /= cnt;

		if (odd && even) {
			for (int i = 1; i < 8; i += 2) {
				fireBall.add(new FireBall(r, c, m, s, i));
			}
		} else {
			for (int i = 0; i < 8; i += 2) {
				fireBall.add(new FireBall(r, c, m, s, i));
			}
		}
	}

	static int calcSum() { // ์งˆ๋Ÿ‰ ํ•ฉ
		int ans = 0;

		for (FireBall f : fireBall) {
			ans += f.m;
		}

		return ans;
	}
}

'๐Ÿ’ญ Problem Solving > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ][Java] 11437. LCA  (0) 2025.10.28
[BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต  (3) 2025.10.21
[BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด  (0) 2025.10.01
[BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)  (0) 2025.09.24
[BOJ][Java] 15486. ํ‡ด์‚ฌ 2  (0) 2025.09.15
'๐Ÿ’ญ Problem Solving/Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [BOJ][Java] 11437. LCA
  • [BOJ][Java] 21608. ์ƒ์–ด ์ดˆ๋“ฑํ•™๊ต
  • [BOJ][Java] 16236. ์•„๊ธฐ ์ƒ์–ด
  • [BOJ][Java] 2533. ์‚ฌํšŒ๋ง ์„œ๋น„์Šค(SNS)
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋ฐฑํŠธ๋ž˜ํ‚น
    ๋งต
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    dynamic programming
    java
    git
    unity
    CSS
    swea
    makefile
    ํŠธ๋ฆฌ
    ๊ตฌํ˜„
    BFS
    ๋ฐฑ์ค€
    VR
    dfs
    .h
    ์ •๋ ฌ
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    La Piscine
    knapsack
    HTML
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    42๊ฒฝ์‚ฐ
    CS
    C
    react
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    github
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[BOJ][Java] 20056. ๋งˆ๋ฒ•์‚ฌ ์ƒ์–ด์™€ ํŒŒ์ด์–ด๋ณผ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”