출처: https://bumcrush.tistory.com/182 [맑음때때로 겨울]
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

package Programmers;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class 롤케이크자르기 {
    public static void main(String[] args){
        롤케이크자르기 T = new 롤케이크자르기();
        int[] topping = {1, 2, 1, 3, 1, 4, 1, 2};
        T.solution(topping);
    }
    public int solution(int[] topping) {
        int answer = 0;
        Set<Integer> set = new HashSet<>();
        Map<Integer, Integer> map = new HashMap<>();

        //Map에다가 전체 토핑의 개수를 구한다.
        for (int i = 0; i < topping.length; i++) {
            map.put(topping[i], map.getOrDefault(topping[i], 0) + 1);
        }
        //토핑배열 첫번째부터 돌면서 Set에는 i위치의 토핑을 추가 해줘가면서 Map에 추가한 토핑 개수랑 비교한다.
        for (int i = 0; i < topping.length; i++) {
            set.add(topping[i]);
            map.put(topping[i], map.get(topping[i]) -1 );
            if(map.get(topping[i]) == 0) map.remove(topping[i]);
            if(set.size() == map.size()) answer++;
        }
        return answer;
    }
}

1. topping 배열 돌면서 Map에다가 전체 토핑개수를 더한다.

2. topping 배열 다시 돌면서 Set에다가 추가해서 중복제거해가면서 추가.

3. Map에는 Set에 추가한만큼 빼준다.

4. Map 크기가 0이면 크기 비교를 위해서 map에서 삭제해준다.

5. Set 크기와 Map 크기 비교

 

※ 뻘짓 

map.put(topping[i], map.getOrDefault(map.get(topping[i]), 0) + 1);

 아래와 같이 변경함 getOrDefault 메서드 잘못씀 

map.put(topping[i], map.getOrDefault(topping[i], 0) + 1);

 

걍 키값만 넣어주면 value 알아서 구해온다.

반응형

+ Recent posts