개발/알고리즘(코딩테스트)

프로그래머스, 자바스크립트) 치킨 쿠폰

빔네모 2024. 3. 9. 10:20

문제

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

 

프로그래머스

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

programmers.co.kr

 

풀이

우선 서비스 치킨은 0, 쿠폰의 수는 치킨 수로 설정한다.

이 동작은 쿠폰이 10개 이상일때 계속 반복되어야 하니 while문을 사용한다.

쿠폰이 10장 생기면 서비스 치킨을 받을 수 있으니 서비스는 = 쿠폰/10장 반내림으로 설정하고

이때 쿠폰의 수는 10으로 나눴을때 나머지 + 서비스 치킨으로 받은 쿠폰 으로 계산해준다.

 

이 과정을 쿠폰이 10장 미만이라 치킨을 더 이상 시켜먹지 못할 때까지 반복하면 된다.

function solution(chicken) {
  //서비스 치킨은 몇 마리?
  let service = 0;
  let coupon = chicken;
  while (coupon >= 10) {
    service += Math.floor(coupon / 10);
    coupon = (coupon % 10) + Math.floor(coupon / 10);
  }

  return service;
}

 

다른 풀이

서비스 치킨을 받기 위해서는 chicken 중 일부 쿠폰을 사용해야 한다

=> 그렇다면 서비스 치킨을 위해 사용하지 않을 쿠폰의 수를 계산해 보자.,

 

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

 

또 다른 풀이 

https://github.com/dawnchung27/programmers_challenge/discussions/39

 

Challenge#39_2023.07.18: 치킨 쿠폰 🍗 · dawn-chung27 programmers_challenge · Discussion #39

💺문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/120884# 솔루션 및 아이디어를 댓글로 공유해주세요👩‍💻

github.com

서비스를 받지 않고 먹은 마릿수 = (chicken -10) = 총 먹은 치킨의 수 - 처음 구매한 10마리
서비스를 받고 먹은 마릿수 = (........ / 9)
처음 구매한 10마리의 서비스 마릿수 = (((......+ 1)

function solution(chicken) {
    if (chicken == 0) return 0;
    return Math.floor(((chicken -10) / 9) + 1) // 처음 10마리를 사야 서비스1마리+1쿠폰 생성, 
                                               // 그 다음부터는 1쿠폰+9마리 구매 = 1마리 서비스.
                                               // 그래서 사실상 9마리를 구매하면 1마리 서비스를 받는다. 
                                               // 9마리 구매시 받는 서비스를 계산하고 난 후에 처음 10마리를 구매하여 생긴 1마리의 서비스를 추가하였다.

    
     10마리 구매                     9마리 구매                       9마리 구매
    🍗🍗🍗🍗🍗
    🎟️🎟️🎟️🎟️🎟️
                   =  서비스🍗      🍗🍗🍗🍗
    🍗🍗🍗🍗🍗            🎟️  +   🎟️🎟️🎟️🎟️ 
    🎟️🎟️🎟️🎟️🎟️                  🍗🍗🍗🍗🍗    =    서비스🍗      🍗🍗🍗🍗
                                  🎟️🎟️🎟️🎟️🎟️                🎟️  +   🎟️🎟️🎟️🎟️    
                                                                     🍗🍗🍗🍗🍗    =  ....
                                                                     🎟️🎟️🎟️🎟️🎟️
    
    
    
    // return parseInt(((chicken -10) / 9) + 1) 
    // parseInt를 사용하면 정수를 뽑아 리턴한다, Math.floor는 negative 숫자도 반환하기 때문에 결과가 다르게 나타난다.
}