알고리즘 문제/프로그래머스
[PG] 위장 JAVA
코등
2020. 12. 27. 15:05
programmers.co.kr/learn/courses/30/lessons/42578
코딩테스트 연습 - 위장
programmers.co.kr
이차원 배열 String[][] clothes가 주어진다.
clothes : { {옷이름, 옷종류}, {옷이름, 옷종류}, ... {옷이름, 옷종류} }
주어진 옷들로 만들 수 있는 조합의 수를 반환하는 문제.
단, 각각의 옷은 입을 수도 안 입을 수도 있으나 아무것도 안 입는 경우는 없다.
풀이 .
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String[][] clothes) {
// clothes : [{옷이름, 옷종료}, {옷이름, 옷종류}, ... , {옷이름, 옷종류} ]
int answer = 1;
Map<String, Integer> hm = new HashMap<String, Integer>();
for(String[] cloth : clothes) {
String key = cloth[1]; // 옷 종류를 key로 사용
if(hm.get(key) == null) {
hm.put(key, 2); // 안 입는 경우도 고려하여 2부터 시작
}else {
hm.put(key, hm.get(key) + 1);
}
}
for(Integer num : hm.values()) {
answer *= num;
}
answer--; // 아무것도 안 입는 경우는 없음
return answer;
}
}
옷의 이름은 중요하지 않다.
옷의 종류를 key로 잡고 HashMap을 사용해 종류별로 몇 개의 옷이 있는지 센 다음 그걸 모두 곱하면 된다.
옷을 입지 않는 경우, 아무것도 입지 않는 경우에 대한 고려를 해줘야한다.
O(n)으로 처리 가능