본문 바로가기
코테연습

201. 롤케이크 자르기 Javascript

by hxunz 2023. 4. 5.

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

 

프로그래머스

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

programmers.co.kr

 

/**
* ## 이해
*
* 미지의 것: 롤케이크를 공평하게 자르는 방법의 수를 구하라.
* 자료
*   - 잘린 조각들의 크기와 올려진 토핑의 개수에 상관없이
      각 조각에 동일한 가짓수의 토핑이 올라가면 공평하게 롤케이크가 나누어진 것으로 생각합니다.
    - 어떤 경우에는 롤케이크를 공평하게 나누지 못할 수도 있습니다.
* 조건
*   -
*
* ## 계획
*   - 토핑을 왼쪽에서부터 센다.
    - 토핑을 오른쪽에서부터 센다.
    - 토핑의 가지수가 같아지면 count를 1 증가시킨다.
    - count를 리턴한다.
*
* ## 실행
*
* ## 반성
*
*/

const solution = (topping) => {
  const left = {};
  const right = {};

  let size = 0;
  let leftSize = 0;

  let count = 0;

  for (let i = 0; i < topping.length; i++) {
    right[topping[i]] = (right[topping[i]] || 0) + 1;
  }

  size = Object.keys(right).length;

  for (let i = 0; i < topping.length; i++) {
    if (leftSize === size) {
      count += 1;
    } else if (leftSize > size) {
      return count;
    }
    if (!left[topping[i]]) {
      leftSize += 1;
    }
    left[topping[i]] = (left[topping[i]] || 0) + 1;
    right[topping[i]] = right[topping[i]] - 1;
    if (right[topping[i]] === 0) {
      size -= 1;
      delete right[topping[i]];
    }
  }
  return count;
};

test('solution', () => {
  expect(solution([1, 2, 1, 3, 1, 4, 1, 2])).toEqual(2);
});

'코테연습' 카테고리의 다른 글

200. 시소 짝꿍 Javascript  (0) 2023.04.03
199. 테이블 해시 함수 Javascript  (0) 2023.04.03
198. 이모티콘 할인행사 Javascript  (0) 2023.03.29
197. 멀쩡한 사각형 Javascript  (0) 2023.03.29
196. 점 찍기 Javascript  (0) 2023.03.29

댓글