[Java] 백준 9375번 패션왕 신해빈 with 자바

: ) YOUNG·2022년 4월 26일
2

알고리즘

목록 보기
114/367
post-thumbnail

문제

백준 9375번
https://www.acmicpc.net/problem/9375


해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까?


생각하기

프로그래머스의 위장과 그냥 똑같은 문제이다.
조합의 숫자를 파악할 수 만 있다면 쉽게 풀 수 있다.

동작

				String[] type = br.readLine().split(" ");
				map.put(type[1], map.getOrDefault(type[1], 0)+1);
			}
			
			Iterator<Integer> it = map.values().iterator();
			
			int result = 1;
			while(it.hasNext()) {
				result *= it.next().intValue() + 1;
			}

이 문제의 힌트는 조합을 파악할 때, 안입을 수 있다.
즉,none이 있다는 것을 파악하면된다.

테스트 케이스에서 headgear가 2개이지만, 실제로는 3개이다.
그 이유는 headgear를 쓰지 않았을 경우를 생각해야 한다.

그리고 마지막에 -1을 해주는 이유는 적어도 하나는 입거나 써야하기 때문에
none끼리의 조합을 마지막에 하나 빼주어야 한다.



코드


import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		while(T-->0) {
			HashMap<String, Integer> map = new HashMap<String, Integer>();	

			int N = Integer.parseInt(br.readLine());
			while(N-->0) {
				String[] type = br.readLine().split(" ");
				map.put(type[1], map.getOrDefault(type[1], 0)+1);
			}
			
			Iterator<Integer> it = map.values().iterator();
			
			int result = 1;
			while(it.hasNext()) {
				result *= it.next().intValue() + 1;
			}
			
			sb.append((result-1) + "\n");
		}

		System.out.println(sb);
	} // End of main
} // End of class

0개의 댓글