자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스 : 치킨 쿠폰

Ryomi 2023. 4. 10. 09:43
728x90
반응형

 

 

치킨 쿠폰

문제설명 :

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

 

제한 사항

  • chicken은 정수입니다.
  • 0 ≤ chicken ≤ 1,000,000

 

입출력 예

chicken result
100 11
1,081 120

 

첫번째 접근

: answer과 rest가 10보다 작아질 때 가지 while문을 돌려주었다. rest에는 나머지 값을 넣고, coupon에는 몫을 넣은 후 answer에 더해주었다. rest의 누적값이 10보다 크거나 같은 경우 coupon에 더해주었다. 하지만, 테스트 케이스 2번을 통과하지 못했다. 

function solution(chicken) { 
    let answer = 0
    let coupon = chicken 
    let rest = 0
    while(coupon + rest > 10){
        rest += coupon % 10 
        coupon = Math.trunc(coupon / 10) 
        answer += coupon
        if(rest >= 10) coupon += rest
    }
    return answer
}

 

 

두번째 접근

: 문제가 뭘까? coupon이 10장이 되었을때, 다시 하나의 쿠폰을 받는다. 이때, rest와의 합산이 이루어 지지 않아 테스트 케이스의 답이 120이 아닌 119로 반환되었다. 반복문의 후반부에 coupon에 rest를 더해주었고 rest 값을 reset해 주었다. 문제가 해결되었다. 

function solution(chicken) {
    let answer = 0
    let coupon = chicken 
    let rest = 0
    while(coupon>= 10){
        rest += coupon % 10
        coupon = Math.trunc(coupon / 10)
        answer += coupon
        coupon = coupon + rest
        rest = 0
    }
    return answer
}

 

 

solution

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

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

    return answer;
}

// while문의 코드를 더 줄여쓸 수 있다.

728x90
반응형