728x90
[백준] 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의 다양한 함수들에 익숙해져야 한다.
728x90
'백준' 카테고리의 다른 글
[BOJ] BOJ_11382 꼬마 정민 (JAVA) (2) | 2024.07.15 |
---|---|
[백준] 5052번 - 전화번호 목록 (JAVA) (0) | 2023.02.06 |
[백준] 1746번 - 듣보잡 (JAVA) (0) | 2023.02.05 |
[백준] 10816번 - 숫자 카드 2 (JAVA) (0) | 2023.02.04 |
[백준] 큰 수 A + B (10757번 JAVA) (0) | 2023.01.10 |