문제정리
각 종류별로 최대 1가지 의상만 착용할 수 있다.
clothes 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있으며, 같은 이름을 가진 의상은 존재하지 않고 알파벳 소문자 또는 _로만 이루어져 있다.
처음 작성한 코드
class Solution {
public int solution(String[][] clothes) {
int answer = clothes.length;
Map<String, Integer> type = new HashMap<>();
for(int i = 0; i < clothes.length; i++){
type.put(clothes[i][1],type.getOrDefault(clothes[i][1],0) + 1);
}
for(int i = 0; i < clothes.length; i++){
if(type.size() == 1){
break;
}
while(!type.containsValue(0)){
type.put(clothes[i][1], type.getOrDefault(clothes[i][1], 0) - 1);
answer++;
}
}
return answer;
}
}
위와같이 코드를 작성한 이유는 일단 map에 headgear, eyewear와 같이 의상의 종류를 넣고 getOrDefault를 사용하여 종류의 개수를 value 값으로 들어갈 수 있게 지정
아래 코드는 type.size()가 1인 경우에는 의상의 종류가 하나이기에 break를 하여 배열 개수가 반환하게 하였고, while 문은 의상의 종류의 개수가 동일한 값 만큼 개수를 더하게 만들어서 반환되게 하도록 만든건데..
결과는 실패..
진짜 너무 단순하게 생각했던 것 같음 각 경우의 수를 생각을 하고 계산을 했어야 했는데;;
최종코드
class Solution {
public int solution(String[][] clothes) {
Map<String, Integer> type = new HashMap<>();
// 의상 종류별 개수 카운트
for (String[] cloth : clothes) {
type.put(cloth[1], type.getOrDefault(cloth[1], 0) + 1);
}
int answer = 1;
// (각 종류별 개수 + 1) 곱하기
for (int count : type.values()) {
answer *= (count + 1);
}
// 모든 의상을 입지 않는 경우(1) 제외
return answer - 1;
}
}
type.values()는 HashMap<String, Integer>에 지정된 각 의상 종류별 개수를 가져오는 역할을 한다. { "headgear":2, "eyewear":1 } 이면 type.values()는 [2, 1] 을 반환하게 된다.
그래도 잘 생각했던 부분은 getOrDefault를 생각해낸 점? 몇일전까지만 해도 저걸 사용해야겠다는 생각을 못했는데.. 굿..
시간은
'코딩테스트' 카테고리의 다른 글
프로그래머스(JAVA) - STACK/QUEUE (기능개발) (1) | 2025.02.15 |
---|---|
프로그래머스(JAVA) - STACK/QUEUE (같은 숫자는 싫어) (1) | 2025.02.13 |
프로그래머스(JAVA) - Hash (전화번호 목록) (1) | 2025.02.10 |
프로그래머스(JAVA) - Hash (완주하지 못한 선수) (1) | 2025.02.05 |
프로그래머스(JAVA) - Hash (폰켓몬) (1) | 2025.02.04 |