본문 바로가기

코딩테스트

[JAVA] 프로그래머스 - 의상

728x90

고득점 알고리즘 kit에 수록된 의상 문제다.

백준에서 동일한 문제를 풀었던 기억이 있으나 한번에 성공하지 못했다..

새로운 문제와 알고리즘을 푸는 것도 중요하지만 복습의 중요성도 느꼈다..

 

🤔 문제 접근

 

주어지는 입출력 예시는 다음과 같다.

의상 이름인 clothes[i][0] 은 중요하지않고 의상 종류인 clothes[i]의 2번째 데이터,

clothes[i][1]을 가지고 풀어야한다.

종류별로 한 벌씩만 입을 수 있기 때문에 의상 이름은 중요하지 않고 의상 종류에 주목해야 하기 때문이다.

 

✅ 핵심 풀이

내가 풀었었던 문제임에도 한번에 풀지 못했던 이유인 "해당 의상을 안 입었을 경우"를 고려해야한다.

clothes[i][1]을 Map<String, Integer>에 put해주고 Map의 entrySet을 활용해

순회해주며 알아낸 value 값에 +1(안 입은 경우)를 해주고 다음 value와 곱해준다.

최종적으로 answer 값을 도출한 후, 문제 조건에 모든 옷을 안 입었을 경우는 없다고 했으므로

answer - 1 을 return 해준다.

 

🚨 CODE

import java.util.*;
import java.io.*;

class Solution {
    public int solution(String[][] clothes) {
        int answer = 1;
        
        Map<String, Integer> map = new HashMap<>();
        for(String[] cl : clothes){
            map.put(cl[1], map.getOrDefault(cl[1], 0) + 1);
        }
        
        for(Map.Entry<String, Integer> entry : map.entrySet()){
            answer = answer * (entry.getValue()+1);
        }
        
        return answer-1;
    }
}

 

728x90
반응형