마이의 개발 블로그

[프로그래머스] 롤케이크 자르기 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 롤케이크 자르기 (Java)

개발자마이 2023. 2. 21. 02:04
반응형

 

 

프로그래머스

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

programmers.co.kr

배열을 하나씩 잘라가며 양쪽의 토핑 종류 개수를 (토핑개수 x) 비교하는 문제이다.

 

- 형(older)은 HashMap으로, 동생(younger)은 HashSet으로 선언

- topping 배열을 한 바퀴 돌며 older한테 전부 넣어주기 : put(토핑번호, 개수);

- topping 배열을 한 바퀴 돌며

1) 해당 토핑을 older에서 1개 빼기 (1개 뺀 후 0개인 경우 키값 제거 필요함. 키의 개수가 size()로 잡히기 때문)

2) 해당 토핑을 younger에 넣어주기

3) older와 younger의 사이즈(토핑종류의 개수) 비교 후 같으면 answer 증가

 

Note

- 안 될 거 알면서도 꼭 한 번 먼저 작성해보는 습관이 있다. 배열의 길이가 길다 싶으면 이중 루프는 무조건 자제하자.

import java.util.*;

class Solution {
    public int solution(int[] topping) {
        int answer = 0;

        Map<Integer, Integer> older = new HashMap<>();
        Set<Integer> younger = new HashSet<>();
        
        for(int i : topping){
            older.put(i, older.getOrDefault(i, 0) + 1);
        }
        
        for(int i : topping){
            older.put(i, older.get(i) - 1);
            if(older.get(i) == 0){
                older.remove(i);
            }
            younger.add(i);
            if(older.size() == younger.size()){
                answer++;
            }
        }
        
        return answer;
    }
}
반응형
Comments