[JS] 2Level / 연습문제 / 롤케이크 자르기

2023. 9. 16. 12:39· 코딩 테스트/프로그래머스 코딩 테스트 연습
목차
  1. 문제 설명
  2.  
  3. 문제 풀이 방법
  4. 코드 
728x90

문제 설명

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이 방법

  • 이 문제의 제한사항을 보면 매개변수로 주어지는 topping의 길이가 1,000,000까지 인걸 볼 수 있다.
    이는 slice() 메서드나 중첩 for문을 이용할 경우 시간복잡도 O(n)으로 인해 시간초과 에러가 날 수있다.
    종합하자면, 이 문제는 시간복잡도 O(n) 최적화 문제인 것이다.
  • 그렇다면 이 문제는 Set()과 slice를 함께 이용해 풀이한는 방식은 안된다는 것이다.
    왜 단정 짓느냐.... 해봤는데 안됬다.
  • 유효한 풀이 방법은 Map 객체에 각 토핑의 갯수를 담아주고 Set객체는 topping을 순회하며 넣어주면서, Map 객체에 있는 토핑의 갯수를 줄여가며 문제를 풀어 나갔다.
  • 생각해보면 케이크를 자르는 부분을 한칸 한칸 늘려가며 비교하는 방식이다.
    그 방식이 Map에 모든 토핑의 갯수를 담고, Set에 topping의 순서대로 하나씩 넣어가며 나누어진 토핑의 가짓수가 같아지는 지점의 수를 측정하는 것이다.

 

코드 

// O(n) 시간 복잡도 최적화 문제
const solution = (topping) => {
    let answer = 0;
    let bro = new Set();
    let map = new Map();
    
    topping.forEach((e) => {
        map.has(e) ? map.set(e, map.get(e)+1) : map.set(e, 1);
    })
    
    topping.forEach((e) => {
        const cnt = map.get(e) - 1;
        bro.add(e);
        cnt === 0 ? map.delete(e) : map.set(e, cnt);
        
        if(bro.size === map.size) answer += 1;
    })
    
    return answer
}
728x90

'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글

[JS] 2Level / 연습문제 / 124 나라의 숫자  (0) 2023.09.21
[JS] 2Level / 연습문제 / 숫자 변환하기  (0) 2023.09.18
[JS] 2Level / 2018 KAKAO BLIND RECRUITMENT / [3차] 파일명 정렬  (0) 2023.09.14
[JS] 2Level / 스택/큐 / 주식가격  (0) 2023.09.14
[JS] 2Level / Summer/Winter Coding(~2018) / 방문 길이  (0) 2023.09.12
  1. 문제 설명
  2.  
  3. 문제 풀이 방법
  4. 코드 
'코딩 테스트/프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
  • [JS] 2Level / 연습문제 / 124 나라의 숫자
  • [JS] 2Level / 연습문제 / 숫자 변환하기
  • [JS] 2Level / 2018 KAKAO BLIND RECRUITMENT / [3차] 파일명 정렬
  • [JS] 2Level / 스택/큐 / 주식가격
58청춘
58청춘
할 수 있었는데, 해야했나, 했어만 했는데 라는 말을 하며 슬픔과 좌절감을 느끼지 않도록
250x250
58청춘
Just 두 It
58청춘
전체
오늘
어제
  • 분류 전체보기 (545) N
    • JavaScript (107) N
      • 모던 자바스크립트 Deep Dive (48)
      • You Don't know JS (44) N
      • Javascript (15)
    • TypeScript (8)
      • 이펙티브 타입스크립트 (3)
    • React (49)
      • 모던 리액트 Deep Dive (8)
      • 리액트 기초 (7)
    • 코딩 테스트 (285) N
      • 프로그래머스 코딩 테스트 연습 (208)
      • 백준 (65) N
      • 구름 Goorm (12)
    • 프로젝트 (2)
      • 북극팽귄 프로젝트 (9)
      • TYLEGG (2)
      • 가말다 - 마일스톤 (11)
      • INMATE 인천 맛집 소개 (11)
    • FE 이모저모 공부 (22)
    • CS (21)
      • 네트워크 (4)
    • MySQL (5)
    • 회고록 (2)
      • React 프리온보딩 (3)
      • 원티드 프리온보딩 프론트엔드 회고록 (0)
      • 가말다 회고록 (0)
    • 파이썬 (2)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • 프로그래머스
  • 취준생
  • node.js
  • 가말다
  • 코테연습
  • 수학
  • 카카오
  • dp
  • REACT
  • 취준
  • Deep Dive
  • 구현
  • typeScript
  • 스택
  • BFS
  • 알고리즘
  • cs
  • JavaScript
  • 코테준비
  • 배열
  • FE개발자
  • 시뮬레이션
  • 백준
  • 코딩테스트
  • 스코프
  • dfs
  • 정렬
  • 프로젝트
  • 완전탐색
  • 문자열

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
58청춘
[JS] 2Level / 연습문제 / 롤케이크 자르기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.