문제 설명
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
chicken은 정수입니다. 0 ≤ chicken ≤ 1,000,000
나의 코드
class Solution {
public int solution(int chicken) {
int answer = 0;
while(chicken>9) {
chicken -= 10;
chicken++;
answer++;
}
return answer;
}
}
다른 사람 코드
class Solution {
public int solution(int chicken) {
int answer = chicken/9;
if(chicken>1&&chicken%9==0){
answer--;
}
return answer;
}
}
해석: 닭 10마리 중 한마리는 공짜입니다. => 9마리를 주문하면 한마리를 공짜로 얻을 수 있습니다. => 9 나누기 9=1 , 다만 첫 주문시에는 10마리 값을 모두 지불해야 공짜 닭을 받을 수 있기 때문에, 9로 딱 나누어 떨어질 경우 마지막 한마리 값을 더 지불해야 합니다. 또 한마리도 시켜먹지 않았을 경우에도 받을 수 없는 공짜 닭이 없어 if조건에서 true를 반환받기 때문에 조건에서 제외해주어야 합니다.
class Solution {
public int solution(int chicken) {
int answer = 0;
while (chicken >= 10){
int service = chicken / 10;
int nmg = chicken % 10;
chicken = service + nmg;
answer += service;
}
return answer;
}
}
느낀 점
chicken이 9보다 작아질 때까지 10개씩 빼주고, 서비스 치킨도 쿠폰 발급에 포함되므로 1을 더해주고, 서비스 치킨 숫자를 1씩 올려주면서 해결하였다.
다른 사람 코드와 같이 논리적으로 해석해서 풀 수도 있고, 정석처럼 푸는 방법도 존재한다.