๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 9518_๋กœ๋งˆ ์นดํ†จ๋ฆญ ๋ฏธ์‚ฌ

๋ฟŒ์•ผ._. 2024. 7. 11. 20:48
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/9518)

< ๋กœ๋งˆ ์นดํ†จ๋ฆญ ๋ฏธ์‚ฌ >

 

๋ฌธ์ œ ํ’€์ด 

 

๋นˆ์ž๋ฆฌ ์ค‘ ๊ฐ€์žฅ ๋งŽ์€ ์ด์›ƒ์ด ์žˆ๋Š” ์œ„์น˜ + ์‚ฌ๋žŒ์ด ์•‰์•„์žˆ๋Š” ์ž๋ฆฌ์˜ ์ด์›ƒ ์ˆ˜ (์ค‘๋ณต x)

 

 my solution (Java)

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

public class _9518_ { // ๋กœ๋งˆ ์นดํ†จ๋ฆญ ๋ฏธ์‚ฌ

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

		int R = Integer.parseInt(st.nextToken());
		int S = Integer.parseInt(st.nextToken());

		char arr[][] = new char[R][S];
		for (int i = 0; i < R; i++) {
			String str = bf.readLine();
			for (int j = 0; j < S; j++) {
				arr[i][j] = str.charAt(j);
			}
		}

		int max = 0, result = 0;
		boolean visited[][] = new boolean[R][S];
		int dx[] = { -1, 1, 0, 0, -1, -1, 1, 1 };
		int dy[] = { 0, 0, -1, 1, -1, 1, -1, 1 };

		for (int i = 0; i < R; i++) {
			for (int j = 0; j < S; j++) {
				if (arr[i][j] == 'o') {
					visited[i][j] = true;
					for (int k = 0; k < 8; k++) {
						int x = i + dx[k];
						int y = j + dy[k];
						if (x >= 0 && x < R && y >= 0 && y < S && arr[x][y] == 'o' && !visited[x][y]) {
							result += 1;
						}
					}
					continue;
				}
				int cnt = 0;
				for (int k = 0; k < 8; k++) {
					int x = i + dx[k];
					int y = j + dy[k];
					if (x >= 0 && x < R && y >= 0 && y < S && arr[x][y] == 'o') {
						cnt += 1;
					}
				}
				if (cnt > max) {
					max = cnt;
				}
			}
		}
		System.out.println(result + max);
	}
}
๋ณ€์ˆ˜)
R, S : ํ–‰, ์—ด
arr : ์‚ฌ๋žŒ์˜ ๋ฐฐ์น˜
max, result : ๋นˆ์ž๋ฆฌ ์ค‘์—์„œ ์•…์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’, ์ด๋ฏธ ์•‰์•„์žˆ๋Š” ์‚ฌ๋žŒ์˜ ์•…์ˆ˜ ํšŸ์ˆ˜
visited : ์•…์ˆ˜ ์—ฌ๋ถ€
dx, dy : ์ด์›ƒ

 

ํ–‰, ์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์‚ฌ๋žŒ์˜ ๋ฐฐ์น˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ arr์— ์ €์žฅํ•œ๋‹ค. arr์„ ์ „์ฒด ํƒ์ƒ‰ํ•œ๋‹ค.

 

1) ์‚ฌ๋žŒ์ด ์•‰์•„์žˆ๋Š” ์ž๋ฆฌ๋ผ๋ฉด ์•…์ˆ˜ ์—ฌ๋ถ€๋ฅผ true๋กœ ์ €์žฅํ•œ ํ›„ ์ธ์ ‘ํ•œ ์นธ ์—ฌ๋Ÿ ์นธ์„ ์‚ดํŽด๋ณด๋ฉฐ ์ด์›ƒ ์ค‘ ์•…์ˆ˜ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ์„ผ๋‹ค.

2) ๋นˆ์ž๋ฆฌ๋ผ๋ฉด ์ธ์ ‘ํ•œ ์นธ ์—ฌ๋Ÿ ์นธ์„ ์‚ดํŽด๋ณด๋ฉฐ ์ด์›ƒ์˜ ์ˆ˜๋ฅผ ์„ผ๋‹ค. max๋ฅผ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

 

์ตœ์ข… result์™€ max์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.