[JS][프로그래머스 -LEVEL 2 -롤케이크 자르기]

정대만·2023년 7월 7일

코딩테스트

목록 보기
20/51
post-thumbnail

문제

여기서 중요한점은 갯수가 아니라 가지고 있는것들중 키 값을 카운트해서 공평하게 나눌수 있는가 아닌가 이다. 처음에는 left right 으로 이동하여 카운트 해볼까 햇으나 아무리해도 아닌거 같아서
해시테이블을 사용해서 차근차근 넣어보았다.

이렇게 [1,1,1,1,1] 인경우도 있으니 for문을 돌릴때 길이 -1 으로 설정해야한다.
자른다고 생각하면 몇가지 나오는것을 알수 있을것이다.

  • 각각의 키값의 갯수를 object 형식으로 카운트한후
  • 앞에서부터 차근차근 내가 갖고 있는것과 해시테이블이 갖고 있는 키값을 비교한다.
  • 이때 해시테이블의 키값이 0 인경우 전체키값의 갯수에서 -1 해서
  • 내가 갖고 있는것과 테이블이 갖고 있는 키값의 갯수가 같은경우에만 count+=1 을해준다.

코드

function solution(topping) {
    var obh={};
    for(var i=0; i<topping.length; i++){
         if(!obh[topping[i]]){
             obh[topping[i]]=1;
         }
        else{
            obh[topping[i]]+=1;
        }
    }
    var total_obh=Object.keys(obh).length;
    var includ_obh=[];
    var count=0;
    for(var i=0; i<topping.length-1; i++){
     obh[topping[i]]-=1;
    if(obh[topping[i]]==0){
               total_obh-=1;
       }
        if(!includ_obh.includes(topping[i])){
            includ_obh.push(topping[i]);
          }
        if(total_obh==includ_obh.length){
            count+=1;
        }
    }
    return (count);
}



처음에 오류가 나서 내가 쓴 로직이 잘못된건가 싶었는데
자세히 보니 배열에 없는 경우에만배열에 넣어주고 object 값을 빼준다로 적어서
처음부터 하나씩 빼주 였다고 . 0 인경우에만 전체키값-=1 으로 해줘서 해결하였다.
로직이 같아도 if 문 잘못써서 틀렸던거였다. 잘봐야되겠다.

profile
안녕하세요

0개의 댓글