[프로그래머스] 위장 - Java, 자바

Kim Ji Eun·2022년 3월 8일
0

난이도

레벨 2

문제

https://programmers.co.kr/learn/courses/30/lessons/42578

풀이

문제 접근

여러 종류의 옷이 있고, 각 종류 별로 1개 이하를 입을 수 있다면 몇가지 옷이 가능하냐는 문제

예제#1을 단순화하면

  • headergear는 총 2개 있으니, 스파이에게 총 3가지 경우의 수가 있다

    • 1번 입기
    • 2번 입기
    • 아무것도 입지 않기
  • eyewear는 총 2개 있으니, 스파이에게 총 2가지의 경우의 수가 있다

    • 1번 입기
    • 아무것도 입지 않기
  • 그렇다면 총 3*2=6가지 인데 아무것도 입지 않은 경우 제거하면 5가지가 된다.

결론 : 해시를 통해 각 type 별로 가짓수를 계산하고 총 경우의 수를 산출한다.

풀이 방법
1. 가짓수를 저장한다.

 HashMap<String, Integer> map = new HashMap<>();
 for (String[] clothe : clothes) {
 	String type = clothe[1];
    map.put(type, map.getOrDefault(type, 0) + 1);
}

여기서 getOrDefault는 찾는 키가 존재하면 값을 반환하고 없다면 기본값(0)을 반환하는 메서드이다.

  1. 경우의 수를 계산한다.
// 방법 1) value 목록을 리스트로 만들어 밸류리스트로 사용
List<Integer> list = new ArrayList<>(map.values()); // 맵에서 가짓수 뽑아 리스트로 변환 
int answer = 1;
for (Integer i : list) {
	answer *= i + 1; // 입지 않은 경우의 수를 추가 +1
}

// 방법 2) keySet으로 value를 가져오는 방법
//        for(String key :map.keySet()){
//            answer*=(map.get(key)+1);
//        }

return answer - 1; // 아무것도 입지 않을 경우에 해당하는 수 1을 뺀다. 

코드

import java.util.*;
class Solution {
    public int solution(String[][] clothes) {
        HashMap<String, Integer> map = new HashMap<>();
        for(String[] clothe: clothes){
            String type = clothe[1];
            map.put(type, map.getOrDefault(type,0)+1);
        }
        
        // 방법 1) value 목록을 리스트로 만들어 밸류리스트로 사용
        List<Integer> list = new ArrayList<>(map.values());
        int answer = 1;
        for (Integer i : list) {
            answer *= i + 1;
        }

        // 방법 2) keySet으로 value를 가져오는 방법
//        for(String key :map.keySet()){
//            answer*=(map.get(key)+1);
//        }
       
        return answer-1;
    }
}

https://coding-grandpa.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%EC%9E%A5-%ED%95%B4%EC%8B%9C-Lv-2-%EC%9E%90%EB%B0%94-Java
https://junghn.tistory.com/entry/JAVA-Map-getOrDefault-%EC%9D%B4%EB%9E%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C
https://codechacha.com/ko/java-convert-map-to-list/

profile
Back-End Developer

0개의 댓글

관련 채용 정보