Level 0) 치킨 쿠폰 ⭐️

Doozuu·2023년 1월 30일
0

프로그래머스 (JS)

목록 보기
32/183

문제 설명

프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.


입출력 예 설명

입출력 예 #1

100마리를 주문하면 쿠폰이 100장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다.
10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
따라서 10 + 1 = 11 을 return합니다.

입출력 예 #2

1081마리를 주문하면 쿠폰이 1081장 발급되므로 서비스 치킨 108마리를 주문할 수 있습니다. 그리고 쿠폰이 1장 남습니다.
108마리를 주문하면 쿠폰이 108장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다. 그리고 쿠폰이 8장 남습니다.
10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
1마리를 주문하면 쿠폰이 1장 발급됩니다.
가지고 있는 쿠폰이 총 10장이므로 서비스 치킨 1마리를 추가로 주문할 수 있습니다.
따라서 108 + 10 + 1 + 1 = 120 을 return합니다.


풀이(시도)

원래 while문을 이용하려다가 조건을 어떻게 써야 할지 모르겠어서 for문으로 작성하였다.
테스트 케이스는 맞았지만 틀린 케이스들도 있고 런타임 에러도 있어서 (무엇보다 과정이 너무 복잡해..) 결국 다른 풀이를 참고했다.

function solution(chicken) {
    let service = []; 
    let left = 0; 
    let n = 1;
    for(i=0;i<100;i++){
        n *= 10;
        // 새로 받는 쿠폰 갯수(= 서비스 치킨 수)
        let new_service = parseInt(chicken/n);
        // 남은 쿠폰이 있는 경우 left에 더해주기
        if(i == 0 && chicken/n !== new_service){ 
            left += chicken - new_service*10; 
        }else if(i > 0 && service[i]/10 !== new_service){
            left += service[i-1] - new_service*10; 
        }
        // 남은 쿠폰이 10개일 경우 서비스 하나 추가하기 & 남은 쿠폰 제거
        if(left == 10){
            service.push(1);
            left -= 10;
        }
        // 더 이상 서비스를 받을 수 없으면 멈추기
        if(new_service == 0) break;
        // 받을 수 있으면 서비스로 받는 치킨 수 넣기
        service.push(new_service);
    }
    // 서비스로 받은 치킨 수 모두 더해주기
    return service.reduce((a,b) => a+b);
}

풀이 (정답)

쿠폰 수랑 치킨 수가 같다는 것과 반복문을 써서 서비스로 받을 수 있는 치킨 수를 계속 더해주어야 한다는 것은 감이 왔었는데, 남은 쿠폰 수를 어떻게 구해야 할지를 너무 복잡하게 생각했다.(그냥 % 이용하면 되는데!!)
그리고 조건식을 쿠폰의 개수에 대해 세워주면 되는 것을 놓친게 오답 포인트였던 것 같다.

function solution(chicken) {
    let coupon = chicken;
    let service = 0;

    while(coupon >= 10){
        service += parseInt(coupon/10)
        coupon = parseInt(coupon/10)+ coupon%10
    }

    return service;
}
profile
모든게 새롭고 재밌는 프론트엔드 새싹

0개의 댓글