본문 바로가기
JAVA/Coding Test Study

[Lv.2] 프로그래머스 - 롤케이크 자르기 : Java

by ♡˖GYURI˖♡ 2024. 4. 15.
728x90
 

프로그래머스

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

programmers.co.kr

 

 

 

이해하기

처음에는 int 배열을 2개 만들어서 철수와 동생의 케이크를 만들어주고, 그 안의 토핑 개수를 세어 서로 같으면 answer++ 해주도록 코드를 만들었다. 푼지 조금 돼서 기억은 안 나지만 실패했던 것 같다.

 

그래서 참고한 블로그⬇️

 

[JAVA] LV2. 롤케이크 자르기

롤케이크 자르기문제설명철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이

velog.io

 

  • 해시맵을 2개 만든다.
  • 한 해시맵에 케이크 토핑을 전부 넣는다.
    • 이 때, 토핑이 중복이라면 개수를 +1 해준다.
  • 다른 해시맵에 토핑을 하나씩 옮긴다.
  • 두 해시맵의 size를 비교하여 같다면 answer++ 해준다.

 

문제풀이

import java.util.*;

class Solution {
    public int solution(int[] topping) {
        int answer = 0;
        
        HashMap<Integer, Integer> map1 = new HashMap<>();
        HashMap<Integer, Integer> map2 = new HashMap<>();
        
        for (int n : topping) {
            map2.put(n, map2.getOrDefault(n, 0) + 1);
        }
        
        for (int n : topping) {
            map1.put(n, map1.getOrDefault(n, 0) + 1);
            
            if (map2.get(n) - 1 == 0) {
                map2.remove(n);
            } else {
                map2.put(n, map2.get(n) - 1);
            }
            
            if (map1.size() == map2.size()) {
                answer++;
            }
        }
        
        return answer;
    }
}