ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 (Level 2) - 위장
    Coding Test/Coding Test 문제 풀이 2022. 1. 6. 14:12
    문제 설명
     

    코딩테스트 연습 - 위장

     

    programmers.co.kr

     

    풀이

    여러 종류의 의상이 있고 각 종류별로 1개 이상의 옷을 입을 수 있다면, 몇 가지 의상의 조합이 가능한가를 구하는 문제이다.

    종류 별로 의상의 개수를 구하고, 경우의 수를 구하는 방식으로 문제를 해결하였다.

    문제의 첫 번째 예시를 아래 표와 같이 표현이 가능하다.

    headgear와 관련된 의상은 총 2개가 있으니 총 3가지의 경우의 수가 있다.

    ㆍ 1번을 입는다.

    ㆍ 2번을 입는다.

    ㆍ headgear와 관련된 의상을 입지 않는다.

     

    eyewear와 관련된 의상은 총 2개가 있으니 총 2가지의 경우의 수가 있다.

    ㆍ 1번을 입는다.

    eyewear와 관련된 의상을 입지 않는다.

     

    최종적으로 3 x 2가지의 경우의 수인 6가지가 존재하고, headgear와 eyewear를 입지 않은 경우인 1가지 경우를 제외하면 5가지가 정답이 된다.

     

    종류별로 의상의 개수를 파악하기 위해 HashMap 자료구조를 사용하였다. 주어진 2차원 배열을 탐색하면서 의상의 종류를 key로 저장하고, 같은 의상을 탐색할 때마다 해당 의상 종류의 개수를 1씩 추가해나갔다.

    탐색이 끝났으면, HashMap 자료구조에 저장된 의상 종류에 따른 개수를 이용해 경우의 수를 구함으로써 문제를 해결하였다.

     

    전체 소스코드
    import java.io.*;
    import java.util.*;
    
    public class Solution06 {
    
    	static Map<String, Integer> map = new HashMap<>();
    
    	public int solution(String[][] clothes) {
    
    		for (int i = 0; i < clothes.length; i++) {
    			String kind = clothes[i][1]; // 의상 종류
    
    			if (!map.containsKey(kind)) {
    				map.put(kind, 1);
    			} else {
    				map.put(kind, map.get(kind) + 1);
    			}
    		}
    
    		int answer = 1;
    
    		for (String kind : map.keySet())
    			answer *= map.get(kind) + 1;
    
    		return answer - 1; // 아무 것도 입지 않은 경우 제외
    	}
    
    }

     

    728x90

    댓글

Designed by Tistory.