프로그래머스, 자바스크립트) 치킨 쿠폰
문제
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 숫자도 반환하기 때문에 결과가 다르게 나타난다.
}