문제 출처 : https://www.acmicpc.net/problem/9375
9375번: 패션왕 신해빈
첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다.
www.acmicpc.net
문제
설명
각 의상 종류에 대해 의상 갯수를 따로 저장해야 하기 때문에, 해시맵으로 푸는 것이 가장 간단하게 풀리는 방법입니다.
입력값에서 의상의 종류를 key로, 각 종류에 대한 의상 갯수를 value로 저장한 다음, 각 value들을 모두 곱해주면 됩니다. 여기서 주의할 점은 해빈이가 알몸이 아닌 상태를 구해야 하므로 그 결과에다 1을 빼 주어야 한다는 점입니다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;
//hashMap 사용
public class BOJ9375_FashionKing {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
HashMap<String, Integer> clothes = new HashMap<String, Integer>();
int T = Integer.parseInt(br.readLine());
for(int tc=0; tc<T; tc++) {
int num = Integer.parseInt(br.readLine()); //옷의 갯수
//초기화 작업!
clothes.clear();
int answer = 1;
for(int i=0; i<num; i++) {
int value = 0;
st = new StringTokenizer(br.readLine());
String name = st.nextToken(); //사실 쓰이지 않음.
String kind = st.nextToken(); //옷 종류(key)
if(clothes.containsKey(kind)) { //이미 key값이 존재한다면
value = clothes.get(kind); //해당 키값에 대한 value를 가져온 다음에
value++; //그 value값을 증가시킨 다음 다시 해시맵에 넣어줌
} else { //key값이 존재하지 않는다면
value++;
}
clothes.put(kind, value);
}
//해시맵 구성 완료 (각 종류에 대한 의상 갯수)
for(int v : clothes.values()) { //values() : 모든 value값 반환
answer *= v+1;
}
sb.append(answer-1 + "\n"); //옷을 최소 하나는 선택해야 하므로
}
System.out.println(sb);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준][JAVA] 2564 - 경비원 (0) | 2021.10.05 |
---|---|
[백준][JAVA] 2605 - 줄 세우기 (0) | 2021.10.05 |
[백준][BOJ] 2606 : 바이러스 (0) | 2021.10.03 |
[백준][JAVA] 15900 : 나무 탈출 (0) | 2021.10.03 |
[백준][JAVA] 1260 : DFS와 BFS (0) | 2021.09.26 |