알고리즘/문제풀기
[프로그래머스] 위장 - 해시
hyun_jo_o
2019. 4. 17. 23:38
문제를 이해하고 경우의 수를 모두 구해야하는 줄 알고 복잡한 문제라고 생각했다.
그런데 질문하기에서 훨씬 접근하기 쉬운 방법을 찾았고 코드를 짜기 시작했다.
※ 문제를 쉽게 해결 할 수 있었던 꿀팁!!
머리:3, 얼굴:2, 옷:1 이라면 총 가능한 개수는
(3+1) * (2+1) * (1+1) -1 = 23 으로 계산 할 수 있다.
+1씩 더한 이유는 착용하지 않은 경우를 추가한 것이고,
마지막에 -1을 해준 이유는 모든 부위를 입지 않은 경우는 없기 때문이다.
위 공식을 사용해서 아래처럼 코드를 짰다.
class Solution {
public int solution(String[][] clothes) {
int answer = 0;
HashMap<String, Integer> clothesmap = new HashMap<>(); //옷의 종류를 key에, 한 종류의 갯수를 value에 저장하는 hashmap
int count = 1; //곱셈을 위한 변수
for(int i=0; i<clothes.length; i++) {
String type = clothes[i][1]; //옷의 종류를 type변수에 저장
if(!clothesmap.containsKey(type)) { //key에 같은 종류의 옷이 있지 않다면
clothesmap.put(type, 0); //옷의 종류와 0을 넣어줌
}
clothesmap.put(type, clothesmap.get(type)+1); //같은 종류가 있다면 +1한 값을 넣어줌
}
for(String str : clothesmap.keySet()) { //종류별로 값을 받아와서 계산을 해준다.
count *= clothesmap.get(str) + 1;
}
answer = count -1;
return answer;
}
}
아~~주 시원한 통과를 볼 수 있었다!!!