본문 바로가기
Algorithm/프로그래머스

[해시] 위장

by seeker00 2021. 9. 24.

해시-위장

java

import java.util.*;

class Solution {
    public int solution(String[][] clothes) {

        HashMap<String, Integer> map = new HashMap<>();
        for (String[] cloth : clothes) {
            // map.compute(cloth[1], (k, v) -> v == null ? 1 : v + 1);
            // compute를 이용해도 되지만, 아래 코드에 비해서 시간이 조금 더 걸린다.
            // compute는 언제 사용하는 건지 잘 모르겠다. 구현 코드를 보면 꽤 복잡해보인다.
            // (복잡해서 제대로 보진 않았다.)
            map.put(cloth[1], map.getOrDefault(cloth[1], 0) + 1);
        }

        Integer answer = map.values().stream().reduce(1, (a, b) -> a * (b+1));

        return answer-1;
    }
}
  • 경우의 수 구하는 부분에서 꽤 헤맸다.
  • 진짜 간단한 계산이었는데...ㅎㅎ(ㅂㄷㅂㄷ)

마음에 드는 다른 분들 코드도 같이 기록한다.

1.

import java.util.*;
import static java.util.stream.Collectors.*;

class Solution {
    public int solution(String[][] clothes) {
        return Arrays.stream(clothes)
                .collect(groupingBy(p -> p[1], mapping(p -> p[0], summingInt(e -> 1))))
                .values()
                .reduce(1, (x, y) -> x * (y + 1) ) - 1;
    }
}
  • stream 쓸 때는 주의하라는 글을 봤었는데... 속도가 좀 떨어진다. 이 부분은 다시 한 번 확인해봐야 할 것 같다.

2.

class Solution {
    int typeIndex = 0;
    String[] types;
    int[] counts;

    public int solution(String[][] clothes) {
        int answer = 1;
        int len = clothes.length;
        this.types = new String[len];
        this.counts = new int[len];

        for(int i = 0; i < len; i++){
            setKeyVal(clothes[i][1]);
        }

        for(int i = 0; i < typeIndex; i++){
            answer *= (counts[i]+2); // 배열 초기화 값이 0이었으므로, 2를 더한다.
        }

        return answer - 1;
    }

    public void setKeyVal(String type){

        for (int i = 0; i < types.length; i++) {
            if(type.equals(types[i])){
                counts[i]++;
                return;
            }
        }
        types[typeIndex] = type;
        typeIndex++;
        return;
    }
}
  • 속도가 가장 좋다. 필요한 부분만 배열을 이용해 깔끔하게 구현해서 작성한 코드라서 그런 것 같다.
  • 배열을 이용해서 정적 할당을 하는 게 조금 아쉽다. key와 value를 포함하는 노드를 갖는 리스트 자료구조를 이용한다면 어떨지 조금 궁금하기도 하고...? map이랑 다를까?

'Algorithm > 프로그래머스' 카테고리의 다른 글

[힙(Heap)] 더 맵게  (0) 2021.12.16
[깊이/너비 우선 탐색(DFS/BFS)] 타겟 넘버  (0) 2021.12.07
[해시] 전화번호 목록  (0) 2021.09.16
[해시] 완주하지 못한 선수  (0) 2021.09.15
[스택/큐] 기능개발  (0) 2021.09.13