본문 바로가기
코딩테스트/커뮤러닝 - JAVA

[3주차] 1. 위장

by 의정부핵꿀밤 2022. 3. 12.
728x90

문제 설명 및 풀이 방식

이 문제는 옷의 종류별 조합이 몇가지나 되는지 구하면 된다

위장 용품 종류 별 갯수를 구해서 곱해주면 전체 조합을 구할 수 있다

이 때 위장 용품 착용을 안할수도 있으니까 각각의 위장용품 종류 + 1을 햇 곱해준다

근데 이렇게 하면 아무것도 착용 안한 경욱 있으니까 그 경우를 하나 빼줘야 한다

 

이 문제의 핵심은 위장 용품의 종류 갯수를 세는 것에 있다!

이를 세기 위해서 해시를 이용한다

 

 

<Hash>

해시는 인덱스가 아닌 키 값을 저장할 수 있는 자료구조이다

특정 key의 hash 값을 얻어서 그걸 배열의 index로 사용하는 자료구조이다

이 때 hash 함수는 최대한 겹치는 값이 없도록 unique한 값을 생성하는 함수이다

또한 해시는 탐색 없이 인덱스(key)값으로 바로 value에 접근이 가능해서 자주 사용된다!

해시 -> 배열, 리스트, 탐색, Hash 자료구조로 구성되어 있어서 면접 질문에도 자주 나오니까 잘 알아두자!

 

 

이제 코드를 보자!

 

 

 

자바 코드)

import java.util.*;
public class comu1 { //위장
    static public int solution(String[][] clothes) {
        int answer = 1;
        Map<String,Integer> counts = new HashMap<>();

        for(String[] c : clothes) {
            String type = c[1]; //옷의 종류

            // type을 key로 갖는 value를 조회해서
            // 만약 null인 경우에는 default 값으로 0을 저장하고
            // null이 아니면 해당 값에 1을 더해라
            counts.put(type, counts.getOrDefault(type, 0)+1);
        }

        for(Integer c : counts.values()) {
            answer *= c + 1;
        }

        answer -= 1;
        return answer;
    }


}

자바에서는 Hash 자료구조를 Map으로 사용한다

Java에서 Map은 인터페이스이기 때문에 new로 생성이 안되고, Map 인터페이스를 구현한 Object를 생성해줘야 하는데 여기서는 HashMap을 사용할 것이다!

그리고 getOrDefault 함수를 이용해서 추가해주고 나머지 알고리즘은 동일~

728x90

'코딩테스트 > 커뮤러닝 - JAVA' 카테고리의 다른 글

[2주차] 게임 맵 최단거리  (0) 2022.03.06
[1주차] 4. 숫자게임  (0) 2022.02.27
[1주차] 3. 예산  (0) 2022.02.27
[1주차] 2. 가장 큰 수  (0) 2022.02.26
[1주차] 1. 기지국 설치  (0) 2022.02.22

댓글