본문 바로가기
알고리즘

롤케이크 자르기

by limew 2023. 12. 7.

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

 

 

 

 

풀이

topping 길이 1,000,000 => O( nlogn )
slice의 시간복잡도는 O(n) => 매번 잘라서 형과 동생의 토핑갯수를 구할 수 없다


처음에 형한테 모든 토핑을 준다

그 후 토핑을 순회하며 동생이 하나씩 가져가고 형과 동생의 토핑갯수를 비교한다.

 

function solution(topping) {
    var answer = 0;
    const old = {}; // 토핑 종류별 갯수
    const young = {};
    let oldCount = 0; // 토핑 종류 갯수
    let youngCount = 0;
    
    topping.forEach(t => {
        if (!old[t]) {
            old[t] = 1;
            oldCount++;
        } else {
            old[t]++;
        }
    })
    
    for (const t of topping) {
        if (!young[t]) {
            young[t] = 1;
            youngCount++;
        } else {
            young[t]++;
        }
        
        // 토핑이 한개 남아있으면 형의 토핑 갯수는 감소한다.
        if (old[t] === 1) {
            oldCount--;
        }
        old[t]--; // 형의 토핑 감소
        
        // 형과 동생의 토핑갯수 비교
        if (oldCount === youngCount) {
            answer++;
        }
    }
    return answer;
}

 

 

'알고리즘' 카테고리의 다른 글

[프로그래머스 lv2] 숫자 카드 나누기  (0) 2023.12.08
줄 서는 방법  (0) 2023.12.08
[프로그래머스 LV2] 마법의 엘리베이터 JS  (0) 2023.12.07
비트마스킹  (0) 2023.12.06
[프로그래머스] 숫자 변환하기  (0) 2023.12.06