[Algorithm] ๐Ÿ‘œ๋ฐฑ์ค€ 9375 ํŒจ์…˜์™• ์‹ ํ•ด๋นˆ

HaJingJingยท2021๋…„ 9์›” 3์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
117/119

0. ๋ฌธ์ œ

ํ•ด๋นˆ์ด๋Š” ํŒจ์…˜์— ๋งค์šฐ ๋ฏผ๊ฐํ•ด์„œ ํ•œ๋ฒˆ ์ž…์—ˆ๋˜ ์˜ท๋“ค์˜ ์กฐํ•ฉ์„ ์ ˆ๋Œ€ ๋‹ค์‹œ ์ž…์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์˜ค๋Š˜ ํ•ด๋นˆ์ด๊ฐ€ ์•ˆ๊ฒฝ, ์ฝ”ํŠธ, ์ƒ์˜, ์‹ ๋ฐœ์„ ์ž…์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ๋‚ ์€ ๋ฐ”์ง€๋ฅผ ์ถ”๊ฐ€๋กœ ์ž…๊ฑฐ๋‚˜ ์•ˆ๊ฒฝ๋Œ€์‹  ๋ Œ์ฆˆ๋ฅผ ์ฐฉ์šฉํ•˜๊ฑฐ๋‚˜ ํ•ด์•ผํ•œ๋‹ค. ํ•ด๋นˆ์ด๊ฐ€ ๊ฐ€์ง„ ์˜์ƒ๋“ค์ด ์ฃผ์–ด์กŒ์„๋•Œ ๊ณผ์—ฐ ํ•ด๋นˆ์ด๋Š” ์•Œ๋ชธ์ด ์•„๋‹Œ ์ƒํƒœ๋กœ ๋ฉฐ์น ๋™์•ˆ ๋ฐ–์— ๋Œ์•„๋‹ค๋‹ ์ˆ˜ ์žˆ์„๊นŒ?

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

  • ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ํ•ด๋นˆ์ด๊ฐ€ ๊ฐ€์ง„ ์˜์ƒ์˜ ์ˆ˜ n(0 โ‰ค n โ‰ค 30)์ดย ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ n๊ฐœ์—๋Š” ํ•ด๋นˆ์ด๊ฐ€ ๊ฐ€์ง„ย ์˜์ƒ์˜ ์ด๋ฆ„๊ณผ ์˜์ƒ์˜ ์ข…๋ฅ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์˜์ƒ์€ ํ•˜๋‚˜๋งŒ ์ž…์„ ์ˆ˜ ์žˆ๋‹ค.

    ๋ชจ๋“  ๋ฌธ์ž์—ด์€ 1์ด์ƒ 20์ดํ•˜์˜ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์œผ๋ฉฐ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์˜์ƒ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ•ด๋นˆ์ด๊ฐ€ ์•Œ๋ชธ์ด ์•„๋‹Œ ์ƒํƒœ๋กœ ์˜์ƒ์„ ์ž…์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก (์ข…๋ฅ˜, ์ด๋ฆ„) ์„ hash ๊ฐ’์œผ๋กœ ์ €์žฅ
๐Ÿ’ก ๊ทธ ์ข…๋ฅ˜์˜ ์˜ท์ด ์—†๋‹ค๋ฉด 2(์•ˆ ์ž…์€ ๊ฒƒ ํฌํ•จ)๋ฅผ ์ €์žฅ ์žˆ๋‹ค๋ฉด ๊ฐœ์ˆ˜๋ฅผ ๋นผ์™€์„œ +1ํ•ด์ฃผ๊ณ  ๋„ฃ์Œ
๐Ÿ’ก key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ value๋ฅผ ๋ชจ๋‘ ๊ณฑํ•œ ํ›„ -1(์•„๋ฌด๊ฒƒ๋„ ์•ˆ์ž…์€ ์ƒํƒœ)์„ ํ•ด์คŒ

2. ํ•ต์‹ฌ ํ’€์ด

  1. ๊ทธ ์ข…๋ฅ˜์˜ ์˜ท์ด ์—†๋‹ค๋ฉด 2(์•ˆ ์ž…์€ ๊ฒƒ ํฌํ•จ)๋ฅผ ์ €์žฅ ์žˆ๋‹ค๋ฉด ๊ฐœ์ˆ˜๋ฅผ ๋นผ์™€์„œ +1ํ•ด์ฃผ๊ณ  ๋„ฃ์Œ
if(map.containsKey(s[1])) {
	map.put(s[1], map.get(s[1])+1);
} else {
	map.put(s[1], 2);
}
  1. key ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ value๋ฅผ ๋ชจ๋‘ ๊ณฑํ•œ ํ›„ -1(์•„๋ฌด๊ฒƒ๋„ ์•ˆ์ž…์€ ์ƒํƒœ)์„ ํ•ด์คŒ
for(String key :map.keySet()) {
	ret *= map.get(key);
}
...
sb.append(Integer.toString(ret-1));

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;

public class BOJ_9375 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int tc = Integer.parseInt(br.readLine());
		
		while(tc-->0) {
			HashMap<String, Integer> map = new HashMap<>();
			int n = Integer.parseInt(br.readLine());
			int ret = 1;
			
			for(int i=0; i<n; i++) {
				String[] s = br.readLine().split(" ");
				
				if(map.containsKey(s[1])) {
					map.put(s[1], map.get(s[1])+1);
				} else {
					map.put(s[1], 2);
				}
			}
			
			for(String key :map.keySet()) {
				ret *= map.get(key);
			}
			
			sb.append(Integer.toString(ret-1));
			sb.append("\n");
		}
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€