자바칩
[프로그래머스 / Java] 코딩테스트 연습: 의상 (해시) 본문
난이도: Level 2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42578
저 문제를 보자마자 해시와 백트래킹으로 풀기 시작했다.
하지만 생각보다 안 풀려서 챗지피티한테 물어보니까 정말 간단한 수학 지식인 조합으로 푸는 것이었다.....
또 쓸데없이 너무 어렵게 생각해서 꼬아버린 것이다.
와 나 진짜 사고력 응용력 바닥이구나.......
나는 사실 고등학교 때 수학을 꽤 재미있어했어서 수학 공부에 시간을 많이 들였지만 인풋 대비 아웃풋이 심각하게 나오지 않았다.
알고리즘도 마찬가지인 것 같다. 꽤 재미있으나 투자하는 만큼 결과가 나오지 않는다.
하지만 뭐 어쩌겠나 타고난 사고력이 이런데..... 계속 해야지 뭐.......
이 문제의 놀라운 점은
clothes: [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]]
이 배열에서 옷 이름은 전혀 필요가 없던 것이다.
즉 clothes[i][0]의 값은 이 문제에서 쓰이지 않는다.
이 배열에서 "headgear"은 2개, "eyewear"은 1개이다.
"headgear" : "yellow_hat", "green_turban"
"eyewear" : "blue_sunglasses"
headgear에서는 아무것도 고르지 않거나, yellow_hat를 고르거나, green_turban를 고를 수 있다.
즉, 3가지의 경우의 수가 있다.
eyewear에서는 아무것도 고르지 않거나, blue_sunglasses를 고를 수 있다.
즉, 2가지의 경우의 수가 있다.
총 경우의 수는 3 * 2 = 6으로 조합할 수 있다.
그러나 모든 곳에서 아무 것도 고르지 않는 경우(headgear에서도 아무것도 고르지 않고, eyeware에서도 아무것도 고르지 않는 경우)는 제거해야 하므로 6에서 1을 뺀 5가 답이 된다.
전체 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
int answer = 1; // 서로 다른 옷의 조합의 수
Map<String, Integer> counts = new HashMap<>(); // K: 의상의 종류, V: 개수
for (String[] c : clothes) {
// 의상의 종류와 개수를 맵에 추가
counts.put(c[1], counts.getOrDefault(c[1], 0) + 1);
}
// 서로 다른 옷의 조합의 수: 각 의상의 종류 개수 + 1을 모두 곱하기
for (int count : counts.values()) {
answer *= count + 1;
}
// 옷을 아무것도 고르지 않은 경우의 수 1개 제거 후 리턴
return answer - 1;
}
}
|
cs |
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / Java] 코딩테스트 연습: 디스크 컨트롤러 (힙) (0) | 2024.08.22 |
---|---|
[프로그래머스 / Java] 코딩테스트 연습: H-Index (정렬) (0) | 2024.08.11 |
[프로그래머스 / Java] 코딩테스트 연습: 가장 큰 수 (정렬) (0) | 2024.08.11 |
[프로그래머스 / Java] 코딩테스트 연습: 베스트앨범 (해시) (0) | 2024.08.09 |
[프로그래머스 / Java] PCCP 기출문제 2번: 석유 시추 (BFS) (0) | 2024.08.04 |