본문 바로가기

알고리즘 문제풀이/백준

[백준][JAVA] 9375 - 패션왕 신해빈

문제 출처 : https://www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로   (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.

www.acmicpc.net

 

 

 

 

 

문제

 

 

 

 

 

설명

각 의상 종류에 대해 의상 갯수를 따로 저장해야 하기 때문에, 해시맵으로 푸는 것이 가장 간단하게 풀리는 방법입니다.

 

입력값에서 의상의 종류를 key로, 각 종류에 대한 의상 갯수를 value로 저장한 다음, 각 value들을 모두 곱해주면 됩니다. 여기서 주의할 점은 해빈이가 알몸이 아닌 상태를 구해야 하므로 그 결과에다 1을 빼 주어야 한다는 점입니다. 

 

 

 

 

 

코드

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

//hashMap 사용

public class BOJ9375_FashionKing {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		
		HashMap<String, Integer> clothes = new HashMap<String, Integer>();

		int T = Integer.parseInt(br.readLine());
		
		for(int tc=0; tc<T; tc++) {
			
			int num = Integer.parseInt(br.readLine()); //옷의 갯수
			
			//초기화 작업!
			clothes.clear();
			int answer = 1;
			
			for(int i=0; i<num; i++) {
				int value = 0;
				st = new StringTokenizer(br.readLine());
				String name = st.nextToken(); //사실 쓰이지 않음.
				String kind = st.nextToken(); //옷 종류(key)
				
				if(clothes.containsKey(kind)) { //이미 key값이 존재한다면
					value = clothes.get(kind); //해당 키값에 대한 value를 가져온 다음에
					value++; //그 value값을 증가시킨 다음 다시 해시맵에 넣어줌
				} else { //key값이 존재하지 않는다면
					value++;
				}
				clothes.put(kind, value);
			}
			//해시맵 구성 완료 (각 종류에 대한 의상 갯수)

			for(int v : clothes.values()) { //values() : 모든 value값 반환
				answer *= v+1;
			}
			
			sb.append(answer-1 + "\n"); //옷을 최소 하나는 선택해야 하므로
		}
		System.out.println(sb);
	}
}