olrlobt
[프로그래머스 2단계] 위장 본문
🔒 2단계 - 위장
📌 테스트케이스 추가 힌트
Parameters[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"],["red_hat", "headgear"],["red_sunglasses", "eyewear"],["red_top", "top"]]
Return23
Parameters[["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"],["red_top", "top"],["blue_jean", "bottom"]]
Return23
✍️ 풀이법
해당 문제의 경우 알고리즘을 생각해 내는 시간이 상당히 오래 걸렸다.
중학교때 배운 경우의 수를 활용하고 싶었는데, 너무 옛날에 배운 것이라 희미하게 떠오른 방법이,
오히려 방법을 떠올리는 경우를 제한해 버렸고, 쉬운 방법이 아닌 어려운 방법으로 돌아가게 했다.
다시 마음을 가다듬어 떠올린 방법은 다음과 같다.
예를 들어, (노란 안경, 파란 안경, 흰 티, 청바지) 가 있다고 가정해보자.
스토커는 안경을 선택할때, 노란색, 파란색 중에 선택할 수 있고, 안 쓸 수도 있다.
즉, 안경이라는 [의상종류]에서 스토커의 선택 경우의 수는 [의상종류의 수 +1] = 3 이 된다.
마찬가지로 티 라는 [의상종류]에서 경우의 수는 2가지,
바지 의 경우의 수는 2가지가 된다.
따라서 총 경우의 수는 8가지.
하지만 여기서 스토커는, 무조건 1개 이상의 의상을 선택해야 하므로,
모두 안 입는 경우의 수 = 1 을 빼 주어야 한다.
따라서 답은 7.
문제 풀이 방법을 생각해 냈다면, 코드로 옮기면 된다.
🗝️ 풀이
import java.util.HashMap;
class Solution {
public int solution(String[][] clothes) {
int answer = 1;
HashMap<String,Integer> map = new HashMap<>();
for(int i=0; i<clothes.length ; i++){
if(map.get(clothes[i][1]) == null){
map.put(clothes[i][1],1);
}else{
map.put(clothes[i][1],map.get(clothes[i][1]) +1);
}
}
for(int i : map.values()){
answer *= i + 1;
}
answer -= 1;
return answer;
}
}
해당 문제의 경우 의상의 이름 변수를 사용할 일이 없다 .
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2단계] 괄호 회전하기 (0) | 2022.12.30 |
---|---|
[프로그래머스 2단계] 캐시 (0) | 2022.12.30 |
[프로그래머스 2단계] 이진 변환 반복하기 (0) | 2022.12.30 |
[프로그래머스 2단계] 올바른 괄호 (0) | 2022.12.30 |
[프로그래머스 2단계] 점프와 순간 이동 (0) | 2022.12.30 |
Comments