백준

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

MoveForward 2023. 2. 5. 01:37

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


[ 접근 과정 ]

 

HashMap을 활용하여 해결하였다.

 

"의상의 종류" 를 key로 하고 "해당 의상의 종류에 해당하는 옷 개수" 를 value로 하는 hash를 생성하였다.

 

의상을 입을 수 있는 경우는

예제 1의 TEST CASE 1을 예로 들면,

 

heargear의 착용 경우는 3가지, (hat 착용, turban 착용, 아무것도 착용하지 않음)

eyewear의 착용 경우는 2가지, (sunglasses 착용, 아무것도 착용하지 않음)

 

이므로 2 * 3 = 6 의 경우에 아무것도 착용하지 않은 알몸의 상태를 제외하면,

 

의상을 입을 수 있는 경우는 5가지 이다. 

 

hash.values()의 각 "값 + 1"을 누적하여 곱한 후 -1을 하였다.

 


[ JAVA 코드 ]

// 9375번 - 패션왕 신해빈
// 해시로 해결해보기
import java.util.*;
import java.io.*;

class Main {
    
    public static void main(String[] args) throws IOException {
       
        // 0. 입출력 선언 / 초기화
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

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

        for(int i=0; i<T; i++){

            // 1. N개의 옷 입력 받기
            int N = Integer.parseInt(br.readLine());
            HashMap<String, Integer> hash = new HashMap<>();
            for(int j=0; j<N; j++){
                StringTokenizer st = new StringTokenizer(br.readLine());
                st.nextToken(); // 의상 이름 버림 (의상 종류만 필요)
                String s = st.nextToken();
                hash.put(s, hash.getOrDefault(s, 0) + 1);
            }

            // 2. 옷 착용 경우의 수 계산 + 출력
            int answer = 1; 
            for(int j : hash.values()){
                answer *= j + 1;
            }
            answer --; // 알몸인 경우 제외
            bw.write(answer + "\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }
}

[ Rewind ]

 

1. 어려웠던 점

- "Hash를 어떻게 활용할 것인가" 를 판단하는 것

 

2. 알게된 점

- Hash 내에 value의 모음

: values()

 

3. 개선 방향

- Hash를 적극적으로 활용하여 문제를 해결해야 한다.

- Hash의 다양한 함수들에 익숙해져야 한다.