๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 8896_๊ฐ€์œ„ ๋ฐ”์œ„ ๋ณด

๋ฟŒ์•ผ._. 2024. 3. 20. 21:02

Silver IV

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/8896)

< ๊ฐ€์œ„ ๋ฐ”์œ„ ๋ณด >

 

๋ฌธ์ œ ํ’€์ด 

 

๊ฐ ๋ผ์šด๋“œ๋งˆ๋‹ค ๋กœ๋ด‡์˜ ๋ฌธ์ž์—ด์„ ๋ณด๊ณ  ๊ฐ€์œ„๋ฐ”์œ„๋ณด์—๊ฒŒ ์ด๊ธฐ๋Š” ๊ฒฝ์šฐ์ธ์ง€ ์ง€๋Š” ๊ฒฝ์šฐ์ธ์ง€ ๋ฌด์Šน๋ถ€์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.Set;

public class _8896_ { // ๊ฐ€์œ„ ๋ฐ”์œ„ ๋ณด

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

		int t = Integer.parseInt(bf.readLine());

		for (int i = 0; i < t; i++) {
			int n = Integer.parseInt(bf.readLine());

			String str = bf.readLine();
			char arr[][] = new char[n][str.length()];
			boolean visited[] = new boolean[n];

			for (int j = 0; j < n; j++) {
				for (int k = 0; k < str.length(); k++) {
					arr[j][k] = str.charAt(k);
				}
				if (j == n - 1)
					break;
				str = bf.readLine();
			}

			Set<Character> set = new HashSet<>();
			int cnt = 0;

			for (int j = 0; j < str.length(); j++) {
				cnt = 0;
				for (int k = 0; k < n; k++) {
					if (visited[k]) {
						continue;
					}
					cnt += 1;
					set.add(arr[k][j]);
				}
				if (cnt == 1) {
					break;
				}
				if (set.size() == 2) {
					char a = '0', b = '0';
					char result = 0;
					for (char x : set) {
						if (a != '0' && b == '0')
							b = x;
						if (a == '0')
							a = x;
					}
					if ((a == 'R' && b == 'S') || (a == 'S' && b == 'R')) {
						result = 'S';
					} else if ((a == 'S' && b == 'P') || (a == 'P' && b == 'S')) {
						result = 'P';
					} else if ((a == 'R' && b == 'P') || (a == 'P' && b == 'R')) {
						result = 'R';
					}

					for (int k = 0; k < n; k++) {
						if (!visited[k] && arr[k][j] == result) {
							visited[k] = true;
						}
					}
				}
				set.clear();
			}

			if (cnt != 1) {
				cnt = 0;
				for (int j = 0; j < n; j++) {
					if (!visited[j]) {
						cnt += 1;
					}
				}
			}
			if (cnt == 1) {
				for (int j = 0; j < n; j++) {
					if (!visited[j]) {
						bw.write((j + 1) + "\n");
						break;
					}
				}
			} else {
				bw.write("0\n");
			}
		}
		bw.flush();
	}
}
๋ณ€์ˆ˜)
t : ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜
n : ์ฐธ์—ฌํ•˜๋Š” ๋กœ๋ด‡์˜ ์ˆ˜
str : ๊ฐ ๋กœ๋ด‡์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด
arr : n๊ฐœ์˜ ๋กœ๋ด‡์˜ ๋ฌธ์ž์—ด
visited : ๋กœ๋ด‡์ด ์‚ด์•„์žˆ๋Š”์ง€ ์—ฌ๋ถ€
set : ๊ฐ ๋ผ์šด๋“œ๋งˆ๋‹ค ๋กœ๋ด‡์ด ๋‚ด๋Š” ๋ฌธ์ž
cnt : k ๋ผ์šด๋“œ ํ›„ ์‚ด์•„์žˆ๋Š” ๋กœ๋ด‡ ์ˆ˜

 

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜๋งŒํผ ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

1) ๋กœ๋ด‡์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ๋กœ๋ด‡์˜ ์ˆ˜๋งŒํผ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์•„ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

2) ๊ฐ ๋ผ์šด๋“œ๋งˆ๋‹ค ์‚ด์•„์žˆ๋Š” ๋กœ๋ด‡์˜ ๋ฌธ์ž๋ฅผ HashSet์— ์ถ”๊ฐ€ํ•œ๋‹ค.

3) HashSet์˜ size๊ฐ€ 2๋ผ๋ฉด ๊ฐ€์œ„๋ฐ”์œ„๋ณด์˜ ์Šน์ž๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ size๊ฐ€ 2์ผ ๋•Œ ๋ฌธ์ž ๊ฐ’ ๋‘ ๊ฐœ๋ฅผ a, b์— ์ €์žฅํ•œ๋‹ค.

4) ๊ฐ€์œ„๋ฐ”์œ„๋ณด๋ฅผ ํ†ตํ•ด ์ง€๋Š” ๋ฌธ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ตฌํ•œ ํ›„ ๊ฒŒ์ž„์—์„œ ์ง„ ๋กœ๋ด‡์ด ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•  ์ˆ˜ ์—†๋„๋ก visited๋ฅผ true๋กœ ์ €์žฅํ•œ๋‹ค.

5) ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ํ›„ visited ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜์—ฌ ์‚ด์•„์žˆ๋Š” ๋กœ๋ด‡์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

6) ๋งŒ์•ฝ ์‚ด์•„์žˆ๋Š” ๋กœ๋ด‡์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ๋ผ๋ฉด ๋กœ๋ด‡์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์‚ด์•„์žˆ๋Š” ๋กœ๋ด‡์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.