[9375번] 패션왕 신혜빈 ( 조합, HashMap )

알쓸코딩·2023년 12월 8일
0

코테 문제들

목록 보기
51/113

각 케이스에 대해서 { 입력받은 경우의 수 + null(선택안함) } 의 갯수를 구한다.
케이스들 끼리 곱한다.
알몸인 경우인 1을 뺀다.
-> 전체 종류에 따라 1개를 고르는 거니까 그냥 갯수끼리 곱해주면 된다.
조합 동작 함수를 안 만들어도 충분히 가능하다!!

종류가 겹치지 않는다고 했으므로 각 키는 고유한 성질이 있는 hashmap을 사용하면 된다.


✅ HashMap

// entrySet()을 통해 Map.Entry의 Set을 얻음
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();      // 키 얻기
            Integer value = entry.getValue();  // 값 얻기

            System.out.println("Key: " + key + ", Value: " + value);
        }

Hashmap에 입력 값을 모두 넣고 어떻게 같은 걸 추출하지? 싶었는데 처음 들어오는 입력이면 다 넣어주고 거기에다 2번째 이상이면 숫자를 증가시키면 된다.

if(h.containsKey(types)){ h.get(types)+1)h.get(types)+1)`;

👾 테스트 케이스가 여러개일 땐 무조건!! for문 안에서 초기화 시켜주자!


✅ 코드

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

public class Main {

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

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

		for (int t = 0; t < test; t++) {
			HashMap<String, Integer> h = new HashMap(); //여기서 초기화 시켜줘야!!
			int n = Integer.parseInt(br.readLine());
			for (int i = 0; i < n; i++) {
				st = new StringTokenizer(br.readLine());
				st.nextToken();
				String types = st.nextToken();
				if (h.containsKey(types)) {
					h.put(types, h.get(types) + 1);
				} else {
					h.put(types, 1);
				}
			}

			int result = 1;
			for (int val : h.values()) { //안입는 경우 포함
				result *= (val + 1);
			}

			System.out.println(result - 1);
		}

	}

}

profile
알면 쓸데있는 코딩 모음!

0개의 댓글