문제
https://school.programmers.co.kr/learn/courses/30/lessons/120884
풀이
우선 서비스 치킨은 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
서비스를 받지 않고 먹은 마릿수 = (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 숫자도 반환하기 때문에 결과가 다르게 나타난다.
}
'개발 > 알고리즘(코딩테스트)' 카테고리의 다른 글
프로그래머스, 자바스크립트) 문자열 밀기 (0) | 2024.03.14 |
---|---|
프로그래머스, 자바스크립트) 저주의 숫자 3 (3) | 2024.03.12 |
프로그래머스, 자바스크립트) 전국 대회 선발 고사 (0) | 2024.03.08 |
프로그래머스, 자바스크립트) 등수 매기기 (0) | 2024.03.08 |
프로그래머스, 자바스크립트) 직사각형 넓이 구하기 (1) | 2024.03.07 |