๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 32076_Easy as ABC

๋ฟŒ์•ผ._. 2025. 7. 10. 20:08
๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/32076)

< Easy as ABC >

 

๋ฌธ์ œ ํ’€์ด 

 

์‚ฌ์ „์ ์œผ๋กœ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ธธ์ด์˜ ๋‹จ์–ด๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์–ด ์‹œ์ž‘์ด A, B, C ์ˆœ์ด์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ 3x3 ๊ทธ๋ฆฌ๋“œ ๋‚ด์— A๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด A๋กœ ์‹œ์ž‘ํ•ด์•ผ ์‚ฌ์ „์ ์œผ๋กœ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. A๊ฐ€ ์—†๋‹ค๋ฉด B๋กœ ์‹œ์ž‘ํ•˜๊ณ , B๊ฐ€ ์—†๋‹ค๋ฉด C๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. 8๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋ชจ๋‘ ๊ตฌํ•ด ์ •๋ ฌ ํ›„ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์ด ์ •๋‹ต์ด๋‹ค.

 

my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.PriorityQueue;

public class _32076_ { // Easy as ABC

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

		char arr[][] = new char[3][3];

		PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {

			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[2] - o2[2];
			}
		});

		for (int i = 0; i < 3; i++) {
			String str = bf.readLine();
			for (int j = 0; j < 3; j++) {
				arr[i][j] = str.charAt(j);
				queue.add(new int[] { i, j, arr[i][j] - '0' });
			}
		}

		int num = queue.peek()[2];
		int dx[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
		int dy[] = { -1, 0, 1, 1, 1, 0, -1, -1 };
		ArrayList<String> list = new ArrayList<>();

		while (!queue.isEmpty() && num == queue.peek()[2]) {
			int temp[] = queue.poll();
			boolean visited[][] = new boolean[3][3];

			visited[temp[0]][temp[1]] = true;

			for (int i = 0; i < 8; i++) {
				String str = Character.toString((char) (temp[2] + '0'));
				int x = temp[0] + dx[i];
				int y = temp[1] + dy[i];

				if (x >= 0 && x < 3 && y >= 0 && y < 3 && !visited[x][y]) {
					str = str + arr[x][y];
					visited[x][y] = true;
					for (int j = 0; j < 8; j++) {
						int x2 = x + dx[j];
						int y2 = y + dy[j];

						if (x2 >= 0 && x2 < 3 && y2 >= 0 && y2 < 3 && !visited[x2][y2]) {
							String str2 = str + arr[x2][y2];
							list.add(str2);
						}
					}
				}
			}
		}
		Collections.sort(list);
		System.out.println(list.get(0));
	}
}
๋ณ€์ˆ˜)
arr : ๊ทธ๋ฆฌ๋“œ
queue : ์šฐ์„ ์ˆœ์œ„ ํ 
num : ์‹œ์ž‘ ๊ฐ’
dx, dy : ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” 8๋ฐฉํ–ฅ
list : ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด
visited : ๋ฐฉ๋ฌธ ์—ฌ๋ถ€

 

๋ฐฐ์—ด arr์— ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ ์šฐ์„ ์ˆœ์œ„ ํ์— [์œ„์น˜, ๋ฌธ์ž]๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋ฌธ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ํ์— A, B, C ์ˆœ์„œ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ์˜ peek() ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

1) queue.poll()

2) 8๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๊ทธ๋ฆฌ๋“œ ๋ฒ”์œ„ ๋‚ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฌธ์ž ์ถ”๊ฐ€ ๋ฐ ๋ฐฉ๋ฌธ ํ‘œ์‹œ

3) ๊ทธ ์œ„์น˜์—์„œ ๋‹ค์‹œ 8๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜์—ฌ ๊ทธ๋ฆฌ๋“œ ๋ฒ”์œ„ ๋‚ด๊ณ  ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์ด๋ผ๋ฉด ๋ฌธ์ž ์ถ”๊ฐ€ ๋ฐ ArrayList์— ์ถ”๊ฐ€

 

์ตœ์ข… ArrayList๋ฅผ ์ •๋ ฌ ํ›„ ๋งจ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.



 

'๐ŸŒžAlgorithm > ๐Ÿ”ฅBaekjoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Baekjoon] 14210_Kartomat  (0) 2025.07.14
[Baekjoon] 27060_Vertical Histogram  (2) 2025.07.11
[Baekjoon] 3518_๊ณต๋ฐฑ์™• ๋นˆ-์นธ  (1) 2025.07.09
[Baekjoon] 16300_H to O  (2) 2025.07.08
[Baekjoon] 26043_์‹๋‹น ๋ฉ”๋‰ด  (3) 2025.07.07