[CDT - Javascript] 프로그래머스 연습문제 @ 롤케이크 자르기

김현수·2024년 2월 8일
0

cdt

목록 보기
39/51


🖋️ 롤케이크 자르기


# 문제 설명

롤케이크를 두 조각으로 잘라서
동생과 한 조각씩 나눠 먹기

  • 조건

    • 여러가지 토핑들이 일렬로 존재
    • 롤케이크를 공평하게 나눠먹기
    • 위에 올려진 토핑 종류 개수 기준으로 나눠먹기
    • 잘린 조각들의 크기, 올려진 토핑의 개수에 상관없이
  • 매개 변수

    • 롤케이크에 올려진 토핑들의 번호를 저장한 정수 배열 topping
  • 반환값

    • 롤케이크를 공평하게 자르는 방법의 수를 return

  • 📢 제한사항

    • 1 ≤ topping의 길이 ≤ 1,000,000
      • 1 ≤ topping의 원소 ≤ 10,000

  • 📰 입출력 예시

    toppingresult
    [1, 2, 1, 3, 1, 4, 1, 2]2
    [1, 2, 3, 1, 4]0



  • CODE

function solution(topping) {
    var answer = 0;
    let right = new Set(topping);
    let left = new Set();
    let counter = new Array(10_001).fill(0);
    
    if(topping.length === 1){
        return answer;
    }
    
    topping.forEach(v => {
        counter[v]++;
    })
    
    topping.forEach(v => {
        if(counter[v] >= 1){
            counter[v]--;
        }
        if(counter[v] === 0){
            right.delete(v);
        }    
        left.add(v);    
        if(left.size === right.size){
            answer++;
        }
    })
    
    return answer;
}

풀이

  • set 과 조건문을 통해 solution 구하기

  • 각 left set 과 right set 을 선언하여 중복 없애기
  • 모든 요소는 right 에 있는 것을 전제로 시작
  • counter 에 해당 토핑의 개수를 담기
  • counter 의 개수에 따라 right 에 제거하고 left 에 추가하기
  • left 와 right 가 같은 개수일 때 공평하게 자르는 방법의 개수 +1
profile
일단 한다

0개의 댓글