1 λΆ„ μ†Œμš”

πŸ“ [S3_9375] νŒ¨μ…˜μ™• μ‹ ν•΄λΉˆ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

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

		// input start
		int TC = Integer.parseInt(br.readLine());

		for (int tc = 0; tc < TC; tc++) {
			int N = Integer.parseInt(br.readLine());

			// key 값은 μ˜μƒ μ’…λ₯˜, value 값은 μ„œλ‘œλ‹€λ₯Έ μ˜μƒ 수
			Map<String, Integer> map = new HashMap<>();

			for (int i = 0; i < N; i++) {
				st = new StringTokenizer(br.readLine(), " ");
				// μ˜μƒ 이름
				String wear = st.nextToken();
				// μ˜μƒ μ’…λ₯˜
				String wear_title = st.nextToken();

				// λ§Œμ•½ map의 key 에 μ˜μƒμ’…λ₯˜κ°€ μ—†μ„λ•Œ
				if (!map.containsKey(wear_title)) {
					// keyλ₯Ό 생성해쀀닀 , 1은 λ°‘μ—μ„œ 더할거
					map.put(wear_title, 0);
				}
				// value 값에 1을 λ”ν•΄μ„œ λŒ€μ²΄ν•΄μ€€λ‹€
				map.replace(wear_title, map.get(wear_title) + 1);
			}

			// 전체 map을 λŒλ©΄μ„œ ( value +1 ) μ”© λ‹€ κ³±ν•΄μ€€λ‹€
			int sum = 1;
			for(Map.Entry<String, Integer> list : map.entrySet()) {
				sum *= (list.getValue()+1);
			}

			// 1을 λΉΌμ€€λ‹€
			sum--;

			sb.append(sum).append("\n");
		}
		System.out.println(sb);
	}
}

πŸ€” λ‚˜μ˜ 생각

이 λ¬Έμ œκ°€ λ‚˜λ₯Ό μ†μ©μ˜€λ‹€β€¦ γ…‹γ…‹ μ²˜μŒμ—λŠ” Map을 톡해 Stringκ³Ό ArrayList을 key와 value κ°’μœΌλ‘œ ν•΄μ„œ μ€‘λ³΅μ²˜λ¦¬μ™€ μ‘°ν•©μœΌλ‘œ 문제λ₯Ό ν’€λ €κ³  ν–ˆλ‹€. 근데 쑰합을 κ΅¬ν˜„ν•˜λŠ” κ³Όμ • 쀑 μ‹œκ°„μ΄ˆκ³Όκ°€ λ– μ„œ κ²°κ΅­ ꡬ글링을 ν•˜κ²Œ λ˜μ—ˆλ‹€..μŠ¬ν”„κ΅° 근데 풀이λ₯Ό 보자마자.. μ™œ 이생각을 λͺ»ν–ˆμ„κΉŒ.. λ„ˆλ¬΄ μˆ˜ν•™μ μœΌλ‘œ μƒκ°ν•˜μ§€ μ•Šμ•˜κ΅¬λ‚˜ λΌλŠ” 생각이 λ“€μ—ˆλ‹€. 이 λ¬Έμ œλŠ” κ΅¬ν˜„μ΄ μ•„λ‹ˆμ˜€λ‹€ γ…‹γ…‹ μˆ˜ν•™μ μœΌλ‘œ μ ‘κ·Όν•΄μ„œ 곡식을 μ°Ύμ•„λ‚΄λŠ” 문제 + Map을 ν™œμš©ν•˜λŠ” 문제 κ°™μ•˜λ‹€. κ·Έλž˜λ„ Map으둜 μ ‘κ·Όν–ˆμœΌλ‹ˆ κ·Έλ‚˜λ§ˆ λ‹€ν–‰..? 인가 ? γ…‹γ…‹ κ²°κ΅­ λͺ»ν’€μ—ˆμœΌλ‹ˆ 땑이지

ν’€μ΄λŠ” 일단 Map의 key 값은 μ˜μƒμ˜ μ’…λ₯˜, value 값은 μ˜μƒμ˜ 수λ₯Ό μ €μž₯ν•œλ‹€. for문을 λŒλ©΄μ„œ μ˜μƒμ˜ μ’…λ₯˜κ°€ 이미 μžˆλŠ” 것이면 μžˆλŠ” 것에 ν•˜λ‚˜λ₯Ό 더해주고 μ—†μœΌλ©΄ μƒˆλ‘œμš΄ keyλ₯Ό λ§Œλ“€μ–΄ ν•˜λ‚˜λ₯Ό 더해쀀닀. κ²°κ³Ό κ°’μœΌλ‘œλŠ” λͺ¨λ“  Map을 λŒλ©΄μ„œ value 값에 ν•˜λ‚˜λ₯Ό λ”ν•˜κ³  κ·Έ 값듀을 λ‹€ κ³±ν•΄μ€€λ‹€. 그리고 λ§ˆμ§€λ§‰μ— -1을 ν•΄μ£Όλ©΄ λœλ‹€. μ—¬κΈ°μ„œ value에 1을 λ”ν•΄μ£ΌλŠ” 것은 μ•ˆ μž…μ€ 경우λ₯Ό κ³ λ €ν•˜λŠ” 것이고 λ§ˆμ§€λ§‰μ— 1을 λΉΌμ£ΌλŠ” 것은 λ‹€ μ•ˆ μž…μ€ 경우λ₯Ό κ³ λ €ν•˜λŠ” 것이닀.

이 문제λ₯Ό ν†΅ν•΄μ„œ 무쑰건 κ΅¬ν˜„μœΌλ‘œλ§Œ μƒκ°ν•˜μ§€ 말고 μˆ˜ν•™μ μœΌλ‘œλ„ μƒκ°ν•΄λ³΄μžκ³  닀짐을 ν–ˆλ‹€ !!