새소식

Algorithm/BOJ

(JAVA) 백준 9375번 : 패션왕 신해빈

  • -
728x90

https://www.acmicpc.net/problem/9375

 

9375번: 패션왕 신해빈

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

www.acmicpc.net

이번 문제는 의상의 종류에 대한 조합 문제이다.

hat headgear
sunglasses eyewear
turban headgear

위와 같은 경우엔 headgear : hat, turban & eyewear : sunglasses 로 2개 ,1개에 대한 조합이다.

하지만 하나만 착용하는 경우가 있기 때문에 +1을 더해주고 둘 다 안 입는 경우는 제외하기 위해 -1 을 해준다.

즉, 3 X 2 - 1 을 구하면 되는 것이다.

이러한 풀이를 위해 종류를 Key 로 잡고 수를 카운트 하는 방식을 사용했다.

HashMapgetOrDefault() 를 사용했다. 

getOrDefault 는 특정 Key에 대한 값이 존재하면 그 값을 반환하고 아닌 경우엔 defaultValue 값을 넣어준다.

풀이는 아래와 같다.

소스 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashMap;
 
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;
		HashMap<String, Integer> map;

		int T = Integer.parseInt(br.readLine());

		while(T-- >0)
		{
			int N = Integer.parseInt(br.readLine());
			map = new HashMap<>();
			

			while(N-- >0)
			{
				st = new StringTokenizer(br.readLine(), " ");
 
				st.nextToken();
				String C = st.nextToken();
				
				// getOrDefault = 값이 없으면 defaultValue(0) 를 반환
				map.put(C, map.getOrDefault(C, 0)+1);
			}
			
			int res = 1;

			// 종류 별로 안 입는 경우까지 포함해서 +1
			for(int K : map.values())
			{
				res *= (K+1);
			}

			// 둘 다 안 입는 경우는 제외해야 하기 때문에 -1
			sb.append(res-1 + "\n");
		}

		System.out.println(sb);
	}
}
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.