[프로그래머스 | 파이썬 / 자바스크립트] 롤케이크 자르기(연습문제/ level 2)

2023. 3. 11. 09:45·Problem Solving/프로그래머스
반응형
문제

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

 

프로그래머스

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

programmers.co.kr

 

 

🐍파이썬
from collections import Counter 
def solution(topping):
    answer = 0
    toppingDic = Counter(topping)	#사전 형식으로 (원소:원소갯수)가 저장된다.
    toppingSet = set()
    for i in topping:
        toppingDic[i] -= 1	#사전에서는 -1로 토핑종류를 1감소시킨다.
        toppingSet.add(i)	#set에는 토핑종류를 1증가시킨다. 중복제거를 위해 set을 사용한다.
        if toppingDic[i] == 0:	#사전의 토핑종류가 0인 원소는 제거한다.
            toppingDic.pop(i)
        if len(toppingDic) == len(toppingSet):	#사전길이와 set길이를 비교해 토핑종류갯수가 같은 경우 asnwer+=1
               answer += 1
    return answer

✔ collections 모듈의 Counter를 이용한다.

 

 

🐥자바스크립트
더보기

❌ 시간초과 실패 코드

function solution(topping) {
    var answer = 0;
    let toppingDic = {}
    topping.forEach((i)=>{
        i in toppingDic === false ? toppingDic[i] = 1 : toppingDic[i] += 1;
    })
    let toppingSet = new Set();
    for(let i of topping){
        toppingDic[i] -= 1;
        toppingSet.add(i);
        if(toppingDic[i] === 0){
            delete toppingDic[i]
        }
        if(Object.keys(toppingDic).length === toppingSet.size){
            answer += 1;
        }
    }
    return answer;
}

👉 파이썬과 동일하게 사전에 모든 원소를 넣고 하나씩 빼고 더하며 답을 구하는 방식을 사용하려 했는데 시간초과가 발생했다. 이후 자바스크립트 풀이답안을 보고 delete를 이용해 사전 원소를 제거하는 대신, dicLen을 이용해 사전의 길이만 따로 구하는 식으로 문제를 풀었더니 정답으로 인정되었다. delete하고 매번 사전 길이를 구하는 데 시간이 많이 소요되는 것 같다.

function solution(topping) {
    var answer = 0;
    let toppingDic = {}
    
    //topping의 모든 원소 갯수를 세서 dic에 저장
    topping.forEach((i) => {    
        i in toppingDic === false ? toppingDic[i] = 1 : toppingDic[i] += 1;
    })
    // toppingDic = { '1': 4, '2': 2, '3': 1, '4': 1 }
    
    let toppingSet = new Set(); //중복제거를 위한 set, 형 토핑 종류 카운트
    let dicLen = Object.keys(toppingDic).length //dic의 길이를 카운트, 동생 토핑 종류 카운트
    
    //topping리스트를 처음부터 끝까지 돌며 dic에서는 원소를 하나 빼고 set에는 더한다.
    for(let i of topping){
        toppingDic[i] -= 1;
        toppingSet.add(i);
        //사전의 값이 0이 된 경우 토핑종류를 -1시키기 위해 dicLen을 1감소시켜준다.
        if(toppingDic[i] === 0){
            dicLen -= 1;
        }
        //dicLen과 set의 길이가 같은 경우 동일한 토핑갯수이므로 answer+=1 
        if(dicLen === toppingSet.size){
            answer += 1;
        }
    }
    return answer;
}

 

 

다른 풀이 방법

function solution(topping) {
    const a = new Set()
    const b = {}
    let answer = 0;
    let check = 0
    
    for (let i = 0; i < topping.length; i++) {        
        if (b[topping[i]]) {
            b[topping[i]]++
        } else {
            b[topping[i]] = 1
            check++            
        }
    }

    for (let i = 0; i < topping.length; i++) {
        a.add(topping[i])
        b[topping[i]]--

        if (!b[topping[i]]) check--
        if (a.size === check) answer++
    }
    return answer;
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > 프로그래머스' 카테고리의 다른 글

[프로그래머스 | 파이썬 / 자바스크립트] 덧칠하기(연습문제 / level 2)  (0) 2023.03.12
[프로그래머스 | 파이썬 / 자바스크립트] 겹치는 선분의 길이(코딩테스트 입문/ level 0)  (0) 2023.03.12
[프로그래머스 | 파이썬 / 자바스크립트] [3차] 압축(2018 KAKAO BLIND RECRUITMENT/ level 2)  (2) 2023.03.11
[프로그래머스 | 파이썬 / 자바스크립트] 영어가 싫어요(코딩테스트 입문/ level 0)  (0) 2023.03.10
[프로그래머스 | 파이썬 / 자바스크립트] 오픈채팅방(2019 KAKAO BLIND RECRUITMENT/ level 2)  (2) 2023.03.06
[프로그래머스 | 파이썬 / 자바스크립트] 과일 장수(연습문제/ level 1)  (0) 2023.03.05
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 | 파이썬 / 자바스크립트] 겹치는 선분의 길이(코딩테스트 입문/ level 0)
  • [프로그래머스 | 파이썬 / 자바스크립트] [3차] 압축(2018 KAKAO BLIND RECRUITMENT/ level 2)
  • [프로그래머스 | 파이썬 / 자바스크립트] 영어가 싫어요(코딩테스트 입문/ level 0)
  • [프로그래머스 | 파이썬 / 자바스크립트] 오픈채팅방(2019 KAKAO BLIND RECRUITMENT/ level 2)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    알고리즘
    구현
    spring boot
    자바스크립트
    강의내용정리
    Next.js
    뉴렉처
    ZeroCho
    자바
    백준
    mysql
    Jiraynor Programming
    웹사이트
    Til
    프로그래머스
    SWEA
    d3
    타입스크립트
    AWS
    컴퓨터네트워크
    클론 프로젝트
    리액트
    블로그 제작
    bfs
    포트폴리오
    공식문서
    프로젝트
    React
    플러터
    파이썬
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[프로그래머스 | 파이썬 / 자바스크립트] 롤케이크 자르기(연습문제/ level 2)
상단으로

티스토리툴바