프로그래머스 연습문제 해시 위장 자바(JAVA) DEV / ALGORITHM
2020-07-18 posted by sang12
프로그래머스 연습문제 위장 해답입니다.
조합을 다시 공부하게되었습니다...큽
스파이가 하루에 한번씩 옷을 입는데, 매일 다른 옷을 입어야 해서 스파이가 가진 옷으로 몇개의 조합을 할 수 있냐?라는 문제입니다. 2차원 배열로 스파이가 입은 옷이 주어집니다.
해결 방법으로는 일단 조합을 알아야 합니다.
얼굴 | 동그란 안경, 검정 선글라스 |
상의 | 파란색 티셔츠 |
하의 | 청바지, 반바지 |
겉옷 | 긴 코트 |
위와 같이 스파이가 입은 옷이 주어지게 됩니다.
얼굴, 상의, 하의, 겉옷에서 1개를 선택하는 경우의 수에서 안입는 경우의 수를 포함해 +1을 해줍니다. 그리고 최소한 1개의 옷을 입는다고 했으니, 모두 안입을 경우의수 -1을 해줍니다. 수식으로 보면 아래와 같습니다 (얼굴, 상의, 하의 겉옷 순)
((2C1+1) * (1C1+1) * (2C1+1) * (1C1+1)) -1
위에 식을 보면 옷의 종류 카운트 수 + 1 을 해서 종류별 경우의수를 다 곱해주고 -1을 해주면 됩니다. 소스는 아래와 같습니다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
Map<String, Integer> clothes_count = new HashMap<String, Integer>();
int answer = 1;
for(String[] cloth : clothes) {
String key = cloth[1];
if(clothes_count.containsKey(key)) {
clothes_count.put(key, clothes_count.get(key) + 1);
}else {
clothes_count.put(key, 1);
}
}
for( String key : clothes_count.keySet() ){
answer = answer * (clothes_count.get(key) + 1);
}
return answer-1;
}
}
#프로그래머스 스파이 문제
REPLY