https://school.programmers.co.kr/learn/courses/30/lessons/42578
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요구사항 요약
주요하게 봐야 할 것은 부위 1개만 입어도 가능하다와 옷을 하나도 입지 않는 경우는 없다라는 사항이며 결과값을 간단히 말하면 옷 종류의 조합 수를 구하면 된다. 입출력 예시를 통해 알아보자
[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]] | 5 |
[["crow_mask", "face"], ["blue_sunglasses", "face"], ["smoky_makeup", "face"]] | 3 |
첫번째 데이터를 보면 headgear - yellow_hat,green_turban / eyewear - blue_sunglasses 형태이다.
하지만 여기서 우리는 무엇을 입었는지가 아니라 그저 조합의 수만 알면 그만이다.
따라서 headgear - 2 / eyewear - 1 로 정리를 한 후 각각 안 쓴 경우까지 추가 해주면 headgear - 3 / eyewear - 2 가 된다
아래 표로 보면 더 이해가 쉽다.
headgear | 아무것도 안입음, yellow_hat, green_turban |
eyewear | 아무것도 안입음, blue_sunglasses |
모든 조합이 수는 3*2를 하여 총 6가지가 나오지만 해당 경우에서 headgear와 eyewear를 안쓴 경우 즉 아무것도 입지 않은 경우를 빼 총 5가지가 나온다.
코드를 아래와 같이 구현할 수 있다.
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String, Integer> clothesMap = new HashMap<>();
//옷 종류 별로 분류 후 총 개수 지정
//getOrDefault에서 없는 경우 1을 return 이유는 해당 종류를 입지 않은 경우 추가
for (String[] c : clothes) {
clothesMap.put(c[1], clothesMap.getOrDefault(c[1], 1) + 1);
}
//모든 조합의 수
for (String k : clothesMap.keySet()) {
answer *= clothesMap.get(k);
}
//모든 종류의 옷을 입지 않은 경우 제외
return answer - 1;
}
'개발 > PS' 카테고리의 다른 글
[프로그래머스]크레인 인형뽑기 게임(java) (0) | 2023.06.29 |
---|---|
[백준]괄호(java) (0) | 2023.06.29 |
[프로그래머스]추억 점수(java) (0) | 2023.06.28 |
[프로그래머스]포켓몬(java) (0) | 2023.06.28 |
[백준]1032번(java) (0) | 2023.06.27 |