๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฌธ์ œ ํ’€์ด] SWEA 4615. ์žฌ๋ฏธ์žˆ๋Š” ์˜ค์…€๋กœ ๊ฒŒ์ž„

by bamDal 2024. 8. 12.

SWEA 4615. ์žฌ๋ฏธ์žˆ๋Š” ์˜ค์…€๋กœ ๊ฒŒ์ž„

 

์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ 8๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ„๋‹จํ•œ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜•์„ ์—ฐ์Šตํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋†“์นœ ์ 

1. ๋ชจ๋“  ์นธ์ด ๊ฒ€์ •๋Œ, ํฐ์ƒ‰๋Œ ๋‘ ๊ฐ€์ง€๋กœ ์ฑ„์›Œ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. (0,1,2 ๋ผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ)
๋”ฐ๋ผ์„œ, ๋Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์…€ ๋•Œ if ๊ฒ€์ • -> ๊ฒ€์ •++ ์™€ else -> ํฐ์ƒ‰++ ๊ฐ€ ์•„๋‹Œ if ์™€ else if ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
=> ์ƒํ™ฉ์— ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋†“์น˜์ง€ ๋ง๊ธฐ

2. change ํ•จ์ˆ˜์—์„œ
๋ฐ”๋กœ ๋‹ค์Œ ์นธ์˜ ๊ฐ’๋งŒ ๋ณด๊ณ  ์ƒ‰์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์Œ.
๊ทธ ๋„ˆ๋จธ์˜ ์นธ๋“ค๊นŒ์ง€ ๋ณด๊ณ ๋‚˜์„œ์•ผ ์–ด๋””๊นŒ์ง€ ์ƒ‰์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ!! โญโญโญโญโญ
์ฆ‰, ์กฐ๊ฑด์€ ๋„ˆ๋จธ์˜ ์นธ๋“ค์—๊ฒŒ ๊ฑธ์–ด์•ผ๊ฒ ์ง•...
=> ๋„ˆ๋จธ์˜ ์นธ๋“ค์„ ๋ณด๋ฉด์„œ  (1) ๊ฐ™์€ ์ƒ‰์ธ์ง€ ํ™•์ธ (if๋ฌธ)   (2) ์–ด๋””๊นŒ์ง€์ธ์ง€ ๋ฒ”์œ„ ์ฒดํฌ (scope)

 


์ž‘์„ฑํ•œ ์ฝ”๋“œ

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

// SWEA_์˜ค์…€๋กœ ๊ฒŒ์ž„ author Ryujy
public class Solution {

	static int N, M;
	static int[][] map;
	static int[] dr = { -1, 1, 0, 0, -1, -1, 1, 1 }; // ์ƒํ•˜์ขŒ์šฐ ์™ผ์œ„ ์˜ค์œ„ ์™ผ์•„ ์˜ค์•„
	static int[] dc = { 0, 0, -1, 1, -1, 1, -1, 1 };

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

		int T = Integer.parseInt(br.readLine());

		for (int tc = 1; tc < T + 1; tc++) {
			st = new StringTokenizer(br.readLine().trim());
			N = Integer.parseInt(st.nextToken()); // ํ•œ ๋ณ€์˜ ๊ธธ์ด 4,6,8
			M = Integer.parseInt(st.nextToken()); // ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋Œ์„ ๋†“๋Š” ํšŸ์ˆ˜

			map = new int[N][N];
			// ์‹œ์ž‘ ์„ธํŒ…
			int sw = N / 2 - 1;
			int sb = N / 2;
			map[sw][sw] = map[sb][sb] = 2;
			map[sw][sb] = map[sb][sw] = 1;

			for (int i = 0; i < M; i++) { // ๋Œ ๋†“๊ธฐ ์ž…๋ ฅ
				st = new StringTokenizer(br.readLine());
				int c = Integer.parseInt(st.nextToken()) - 1;
				int r = Integer.parseInt(st.nextToken()) - 1;
				int color = Integer.parseInt(st.nextToken()); // 1 -ํ‘, 2 -๋ฐฑ

				map[r][c] = color; // ๋Œ ๋†“๊ธฐ
				change(r, c, color); // 8๋ฐฉํ–ฅ์œผ๋กœ ์ƒ‰ ๋ณ€๊ฒฝํ•  ๋Œ ์ฐพ๊ธฐ		

			} // ๋Œ ๋†“๊ธฐ ์ž…๋ ฅ ๋

			int w = 0;
			int b = 0;
			for (int x = 0; x < N; x++) {
				for (int y = 0; y < N; y++) {
					if (map[x][y] == 1)
						b++;
					else if (map[x][y] == 2) {
						w++;
					}
				}
			}
			System.out.println("#" + tc + " " + b + " " + w);

		} // tc end

	}

	private static void change(int r, int c, int color) {
		// ๊ฐ€๋กœ, ์„ธ๋กœ๋Š” ์ƒํ•˜์ขŒ์šฐ๋กœ ๋‘ ์นธ ๋„ˆ๋จธ ๋ณด๊ณ  ํ•œ ์นธ ๋„ˆ๋จธ ์ƒ‰์น  // ๋Œ€๊ฐ์„ ์€? ๋งˆ์ฐฌ๊ฐ€์ง€
		for (int d = 0; d < 8; d++) { // ์ƒํ•˜์ขŒ์šฐ ๋Œ€๊ฐ์„  -> 8๋ฐฉ์œ„ ํƒ์ƒ‰
			int scope = 1;
			while (true) {
				int sr = r + dr[d]*scope;
				int sc = c + dc[d]*scope;
				
				if (sr < 0 || sr > N - 1 || sc < 0 || sc > N - 1) { // ๋ฒฝ ๋งŒ๋‚˜๋ฉด ๋
					break;
				}
				if (map[sr][sc] == 0) { // ๊ฑด๋„ˆํŽธ์— ๊ฐ™์€ ์ƒ‰ ์—†์œผ๋ฉด ๋
					break;
				}
				
				if (map[sr][sc] == color) { // ์˜ค ๊ฐ™์€ ์ƒ‰ ์ฐพ์Œ
					for (int s=1; s<scope; s++) {
						int tr = r + dr[d]*s;
						int tc = c + dc[d]*s;
						
						map[tr][tc] = color;
					}
					break;
				}
				scope++;
			}
		}
	}
}

 

 


์กฐ๊ฑด๋ฌธ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„์ง ๋ถ€์กฑํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์—ฐ์Šต ํ•„์š”ํ•„์š”!! ๐Ÿฅฒ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ค๋žœ๋งŒ์— ํ’€๋ ค๋‹ˆ ์ง„์งœ.. ํ•˜๊ธฐ์‹ซ๋‹ค.. ์–ธ์ œ์ฏค ์žฌ๋ฏธ๊ฐ€ ๋ถ™์„๋ผ๋‚˜ ใ… 

๊ทธ๋ž˜๋„ ์–ด๋–กํ•ด... ํ•ด์•ผ์ง€.......................