본문 바로가기
백준

[백준] 단계별로 풀어보기(단계:17,정수론 및 조합론,JAVA)9375번, 패션왕 신해빈

by 열정적인 이찬형 2022. 2. 7.

문제 링크

9375번: 패션왕 신해빈
 
www.acmicpc.net

주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

이 문제는 경우의 수를 구하는 문제로

 

headgear eyewear
아무것도 착용 안했을 때 아무것도 착용 안했을 때
hat sunglasses
turban  
   

headgear(경우의 수) = 3

eyewear(경우의 수) = 2

headgear와 eyewear를 모두 착용하지 않았을 때(알몸 상태) = 1

경우의 수 = 3 * 2 - 1 = 5

face
아무것도 착용 안했을 때
mask
sunglasses
makeup

face(경우의 수) = 4

face를 착용하지 않았을 때(알몸 상태) = 1

경우의 수 = 4 - 1 = 3

알고리즘

옷의 종류의 경우의 수 * 다른 옷의 종류의 경우의 수 * .....  - 알몸인 상태(=1)

  • 옷의 종류에 따른 개수를 저장하는 Map 만들었습니다.
  • BufferedReader를 사용하여 입력 값을 받았습니다.
  • StringTokenizer를 사용하여 띄어쓰기 기준 입력값을 나누어 map에 저장하였습니다.
  • 위에 알고리즘을 적용하여 경우의 수를 구하였습니다.
  • 경우의 수를 BufferedWriter에 저장하였습니다.
  • BufferedWriter을 사용하여 저장된 결과를 출력하였습니다.

결과 코드

import java.io.*;
import java.util.*;
public class Main{
	static HashMap<String,Integer> map;		//옷관련 저장 Map
	static int index;		//입력 개수
	public static void main(String[] args) throws IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedReader를 통해 입력 값 받기
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	//BufferedWriter를 통해 결과 값 출력
    	map = new HashMap<String,Integer>();	//맵 초기화
    	index = Integer.parseInt(br.readLine());
        //----------입력값 저장--------------
    	for(int i=0;i<index;i++) {
    		int temp = Integer.parseInt(br.readLine());
    		int result = 1;
    		for(int j=0;j<temp;j++) {
            	StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            	String wear = st.nextToken();
            	String kind = st.nextToken();
            	map.put(kind, map.getOrDefault(kind, 1)+1);
    		}
            //-----------경우의 수 구하기----------
    		for(String key : map.keySet()) {
    			result  *= map.get(key);
    		}
    		result--;
    		bw.write(result + "\n");	//결과 BufferedWriter에 저장
    		map.clear();	//맵 초기화
    	}

    
    	bw.flush();		//결과 출력
    	bw.close();
    	br.close();
	}
}

댓글