Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[프로그래머스] 위장 본문

코테준비

[프로그래머스] 위장

Seung__ 2021. 11. 27. 01:27

1. 문제


  • 문제 설명

스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.

예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.

 

  • 종류이름
    얼굴 동그란 안경, 검정 선글라스
    상의 파란색 티셔츠
    하의 청바지
    겉옷 긴 코트
     

 

  • 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
  •  제한사항
    • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
    • 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
    • 같은 이름을 가진 의상은 존재하지 않습니다.
    • clothes의 모든 원소는 문자열로 이루어져 있습니다.
    • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 '_' 로만 이루어져 있습니다.
    • 스파이는 하루에 최소 한 개의 의상은 입습니다.
  • 입출력 예
    clothes return
    [["yellowhat", "headgear"], ["bluesunglasses", "eyewear"], ["green_turban", "headgear"]] 5
    [["crowmask", "face"], ["bluesunglasses", "face"], ["smoky_makeup", "face"]] 3

     
  • 입출력 예 설명
  • 예제 #1
    headgear에 해당하는 의상이 yellow_hat, green_turban이고 eyewear에 해당하는 의상이 blue_sunglasses이므로 아래와 같이 5개의 조합이 가능합니다. 
  • 1. yellow_hat
    2. blue_sunglasses
    3. green_turban
    4. yellow_hat + blue_sunglasses
    5. green_turban + blue_sunglasses
    
  • 예제 #2
    face에 해당하는 의상이 crow_mask, blue_sunglasses, smoky_makeup이므로 아래와 같이 3개의 조합이 가능합니다.
  • 1. crow_mask
    2. blue_sunglasses
    3. smoky_makeup

 

2. 초기 아이디어


  • HashMap을 사용하여 옷장에 옷을 종류별로 구분하여 넣자.
  • 각 종류별 경우의 수는 아래 표와 같다.
종류 A B C
a, b, c d, e f
경우의 수 4(3+1)
(a or b or c or x)
3(2+1) 2(1+1)

각 경우의 수를 곱해주고 아무것도 안입는 하나의 경우를 제외해주면 된다.

 

 

 

3. 코드


 

public int solution(String[][] clothes) {
    int answer = 1;

    HashMap<String, ArrayList<String>> closet = new HashMap<>();

    ArrayList<String> clotheList;

    //배열을 싹 돌면서
    for (String[] clothe : clothes) {
        clotheList = new ArrayList<>();

        //현재 옷의 종류가 옷장에 있는 경우
        if (closet.containsKey(clothe[1])){

            //해당 옷의 종류에 옷 추가
            closet.get(clothe[1]).add(clothe[0]);
        }else {
            //현재 옷의 종류가 옷장에 없는 경우
            clotheList.add(clothe[0]);

            //옷장에 새로 넣음.
            closet.put(clothe[1],clotheList);
        }
    }

    System.out.println(closet);

    //["A", {"asdfsdf", "sdasdasd"}],["B", {"asdasd"}], ["C", {"qweqwe"}],["D",{"123123"}],["E", {"Asd5"}]]
    for (String category : closet.keySet()) {
           answer *= closet.get(category).size()+1;
    }

    //모두 선택 안하는 경우 제외;
    return --answer;
}

 

 

 

4. 결과


  • 모든 테스트 통과

 

 

5. GitHub :211127 Camouflage


 

GitHub - bsh6463/coding_test

Contribute to bsh6463/coding_test development by creating an account on GitHub.

github.com

 

Comments