프로그래머스 0단계 - 치킨 쿠폰

이종현·2024년 1월 14일
0

코딩테스트

목록 보기
14/24
post-thumbnail

문제 설명

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


제한사항

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

입출력 예

chickenresult
10011
1,081120

1. 문제 이해

  • 무조건 하나를 주문하면, 그게 쿠폰 10장으로 주문한거든 그냥 주문한거든 쿠폰 1장을 발행해준다.
  • input이 10^6 이기 때문에 최대 O(n)의 시간복잡도로 문제를 풀어야 한다.
  • 쿠폰 10장으로 주문한 경우에 발급되는 쿠폰을 잘 카운트해야 한다.

2. 접근 방법

  • 직관적으로 생각하기
    • 일단 전체 주문 수를 10으로 나눠서 실제 주문으로 받은 쿠폰으로 시킨 서비스 치킨의 수를 구한다.
    • 서비스 치킨으로 받은 쿠폰을 계산하고 기존에 있던 나머지 쿠폰과 더한다.
    • 남은 쿠폰으로 구매할 수 있는 서비스 치킨의 수를 구해서 기존 값에 더한다.
    • 다시 발행되는 쿠폰으로 서비스 치킨을 사먹을 수 있으면 기존 값에 더하고 아니면 종료한다.

3. 코드 설계

  • 직관적으로 생각하기
    • let service = 0
    • let coupon = 0
    • while(chicken > 10)
    • service += Math.floor(chicken / 10)
    • coupon += Math.floor(service / 10) + chicken % 10
    • chicken += coupon
    • return service

4. 코드 구현

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

  while (coupon >= 10) {
    service += Math.floor(coupon / 10)
    coupon = Math.floor(coupon / 10) + (coupon % 10)
  }

  return service
}

다른 사람 풀이

function solution(chicken) {
    var answer = parseInt((chicken-1) / 9);
    return answer;
}

회고

처음에 코드 설계했던 부분과는 조금 다르게 구현했다. 처음에 생각했던 데로 구현이 될거라 생각했지만, 실제 시도해보니까 무한 루프가 걸린다거나 무한대값을 출력한다든지 해서 하나씩 시도해보다가 결국 위와 같은 코드로 구현을 완료했다.

profile
데이터리터러시를 중요하게 생각하는 프론트엔드 개발자

0개의 댓글