티스토리 뷰

문제 링크

위장

문제 조건

  • 스파이들은 위장을 위해 매일 다른 옷을 조합하여 자신을 위장한다.
  • 스파이가 가진 의상의 수는 1개 이상 30개 이하이다.
  • 같은 이름을 가진 의상은 존재하지 않는다.
  • clothes의 모든 원소는 문자열로 이루어져 있다.
  • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 _ 로만 이루어져 있다.
  • 스파이는 하루에 최소 한 개의 의상은 입어야 한다.

변수 설명

  • clothes : 각 행이 [의상의 이름, 의상의 종류]로 이루어져 있는 2차원 배열 (매개변수)
  • hm : 의상 종류별 개수를 확인하기 위한 HashMap<String, Integer>
  • len : clothes의 길이
  • value : hm의 value들, 즉 의상 종류별 개수

코드 설명

  • 경우의 수를 구하는 문제이다.
  1. clothes에 있는 의상들을 모두 hm에 넣어주고 종류별 개수를 확인한다.
  2. hm.values()를 사용하여 경우의 수를 구한다.

배운 점

  • 경우의 수 공식 : (a + 1) * (b + 1) * (c + 1) ... - 1
  • 모든 종류의 옷은 입거나 안입거나
    • (+) value에 1을 더해준 이유 : 안 입었을 경우
    • (+) 마지막 answer에 1을 빼준 이유 : 모두 안입었을 경우를 빼준다.
    • (+) hm.values : key값은 필요없으므로 value 값만 가져온다.

문제 해답


import java.util.HashMap;
import java.util.Map;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 0;
        int size = clothes.length;
        HashMap<String, Integer> hm = new HashMap();
        for(int i=0;i<size;i++){
            hm.put(clothes[i][1], hm.getOrDefault(clothes[i][1], 0) + 1);
        }
        answer = 1;
        for(int value : hm.values()) {
            answer *= (value+1);
            }
        answer--;
        return answer;
    }
}
public class Main {
    public static void main(String[] args) {
        Solution Test = new Solution();
        String[] p = {"leo", "kiki", "eden"};
        String[] c = {"eden", "kiki"};
        int answer = Test.solution(p,c);
        System.out.println(answer);
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함