[ Baekjoon ] 9375번 ( SILVER III ) : 패션왕 신해빈(Java)

ma.caron_g·2022년 6월 15일
0

Class3 - Baekjoon

목록 보기
12/13
post-thumbnail

1. Problem 📃

[ 패션왕 신해빈 ]

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


[ 문제 ]

해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?


2. Input ⌨️

[ 입력 ]

첫째 줄에 테스트 케이스가 주어진다. 테스트 케이스는 최대 100이다.

각 테스트 케이스의 첫째 줄에는 해빈이가 가진 의상의 수 n(0 ≤ n ≤ 30)이 주어진다.
다음 n개에는 해빈이가 가진 의상의 이름과 의상의 종류가 공백으로 구분되어 주어진다. 같은 종류의 의상은 하나만 입을 수 있다.
모든 문자열은 1이상 20이하의 알파벳 소문자로 이루어져있으며 같은 이름을 가진 의상은 존재하지 않는다.


3. Output 🖨

[ 출력 ]

각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오.


4. Example 📚

[ 입출력 예시 ]

예제 입력예제 출력
2
3
hat headgear
sunglasses eyewear
turban headgear
3
mask face
sunglasses face
makeup face
5
3

5. Solution 🔑

해빈이는 미친게 분명하다..

경우의 수를 따져보면 될 거 같다. 무슨 옷, 무슨 안경, 무슨 모자인지는 중요하지않다 종류마다의 개수가 중요하다.

  1. 겹치는 거 없이, 종류를 세어주기 위해 집합(Set)을 이용해주기 위해 하나 선언했습니다.
  2. 테스트케이스(T)를 선언하여 입력 받아준다. T만큼 루프를 돌린다.
  3. 입력받을 개수(n)을 입력받아 정의한 setClothes 메서드로 옷을 분류해준다.

    [ 옷 종류마다 개수를 세어주는 setClothes 메서드 ]

    1. 입력받은 값을 각각 key, val 변수에 담아준다. (앞이 밸류값이기 때문에)
    2. Set에 포함돼 있지 않은 값이라면 키를 넣고 값을 1을 넣어준다.
      이미 포함된 값이라면 값을 불러와 +1을 한 값으로 넣어 수정해준다
  4. 세팅할 수 있는 패션(set)을 1로 지정해준다 (뒤에 곱셈해줄거기 때문에)
  5. set에 Set의 값에 +1한 값들을 곱해준다. (벗은 경우를 포함하기 때문에)
  6. 그 후 set을 출력하는데 다 벗은 경우를 제외하고 -1하여 출력한 다음 set을 clear()하고 다음 테스트를 받는다.

6. Code 💻

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

public class Main {
	
	static BufferedReader br;
	static StringTokenizer st;
	
	static HashMap<String, Integer> map = new HashMap<String, Integer>();
	
	public static void main(String[] args) throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());

		for(int i=0; i<T; i++) {
			int n = Integer.parseInt(br.readLine());
			
			setClothes(n);
			
			int set = 1;
			
			for(int val : map.values()) {
				set *= (val + 1);
			}
			System.out.println(set-1);
			map.clear();
		}
	
		
		
		
	}
	
	public static void setClothes(int n) throws IOException {
		for(int i=0; i<n; i++) {
			
			st = new StringTokenizer(br.readLine(), " ");
			String val = st.nextToken();
			String key = st.nextToken();
			
			if(!map.containsKey(key)) {
				map.put(key, 1);
			}
			else {
				map.put(key, map.get(key) + 1);
			}
			
		}
	}

}
profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글