[Programmers] 롤케이크 자르기

2023. 9. 6. 16:20Computer Sciences/Problem Solve

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

 

프로그래머스

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

programmers.co.kr

문제 설명

형과 동생이 토핑의 개수를 똑같이 나눠먹기 위한 문제이다. 문제를 보고 Set을 사용해서 풀려고 했으나 엄청난 시간 초과를 보았고 Map과 Set을 함께 사용하여 해결했다.

코드

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

class Solution {
    public int solution(int[] toppings) {
        int answer = 0;
        Map<Integer, Integer> older = new HashMap<>();
        Set<Integer> younger = new HashSet<>();
        
        for (int topping : toppings) {
            older.put(topping, older.getOrDefault(topping, 0) + 1);
        }
        
        for (int topping : toppings) {
            younger.add(topping);
            older.put(topping, older.get(topping) - 1);
            if (older.get(topping) == 0) {
                older.remove(topping);
            }
            if (older.size() == younger.size()) {
                answer++;
            }
        }
        
        return answer;
    }
}

Set만 사용해서 풀었던 코드

최대 크기가 1,000,000(백만)인데 매번 모든 요소를 순회했다. 따라서 토핑이 백만 개라면 백만*백만만큼의 시간복잡도가 되므로 시간 초과가 발생했다.

import java.util.Set;
import java.util.HashSet;

class Solution {
    public int solution(int[] toppings) {
        int answer = 0;
        
        for (int i = 0; i < toppings.length; i++) {
            Set<Integer> older = new HashSet<>();
            Set<Integer> younger = new HashSet<>();
            
            for (int j = 0; j < i; j++) {
                older.add(toppings[j]);
            }
            
            for (int j = i; j < toppings.length; j++) {
                younger.add(toppings[j]);
            }
            
            if (older.size() == younger.size()) {
                answer++;
            }
        }
        
        return answer;
    }
}

'Computer Sciences > Problem Solve' 카테고리의 다른 글

[Programmers] 2 x n 타일링  (0) 2023.09.06
[Programmers] 숫자 변환하기  (0) 2023.09.06
[Programmers] 하노이의 탑  (0) 2023.09.06
[Programmers] 뒤에 있는 큰 수 찾기  (0) 2023.09.06
[Programmers] 스킬트리  (0) 2023.09.05