[JAVA/백준] 수학 3: 패션왕 신해빈

👀 문제

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

👊 도전

1. 설계

  1. HashMap을 이용하여 종류별 의상 갯수를 센다.
  2. (종류1+1)*(종류2+1)*...*(종류n+1)-1을 리턴한다.

2. 구현 (성공 코드)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.HashMap;
import java.util.Scanner;
/**
 * @author HEESOO
 *
 */
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input=new Scanner(System.in);
		int t=input.nextInt();
		for(int i=0;i<t;i++) {
			int n=input.nextInt();
			HashMap<String, Integer> map=new HashMap<>();
			for(int j=0;j<n;j++) {
				String name=input.next();
				String kind=input.next();
				if(map.containsKey(kind)) {
					int idx=map.get(kind);
					map.put(kind, idx+1);
				}
				else {
					map.put(kind, 1);
				}
			}
			int answer=1;
			for(int value: map.values()) {
				answer*=value+1;
			}
			System.out.println(answer-1);
		}
	}
}

 

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 공식을 찾는다
    • 의상 종류 별 수+1한 값을 모두 곱한 값에 -1하면 정답이 나온다.
  2. HashMap을 이용한다
    • 의상 종류를 key, 그 갯수를 value로 하여 새로운 의상이 나오면 키를 부여하고, 기존에 존재하는 의상 종류이면 value+1하여 종류별 갯수를 센다.
    • map.values()함수를 이용하여 해시맵에 들어있는 모든 values를 하나씩 조회하며 해당 value+1한 값을 곱한다.
    • 모든 곱에서 -1한 값을 출력한다.

👏 해결 완료!

참고