코딩테스트/Programmers
[Programmers] 입문) 치킨 쿠폰
HONGGG
2023. 7. 24. 16:06
치킨 쿠폰
문제 설명
프로그래머스 치킨은 치킨을 시켜먹으면 한 마리당 쿠폰을 한 장 발급합니다. 쿠폰을 열 장 모으면 치킨을 한 마리 서비스로 받을 수 있고, 서비스 치킨에도 쿠폰이 발급됩니다. 시켜먹은 치킨의 수 chicken이 매개변수로 주어질 때 받을 수 있는 최대 서비스 치킨의 수를 return하도록 solution 함수를 완성해주세요.
제한사항
- chicken은 정수입니다.
- 0 ≤ chicken ≤ 1,000,000
입출력 예
chicken | result |
100 | 11 |
1,081 | 120 |
1999 | 222 |
입출력 예 설명
입출력 예 #1
- 100마리를 주문하면 쿠폰이 100장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
- 따라서 10 + 1 = 11 을 return합니다.
입출력 예 #2
- 1081마리를 주문하면 쿠폰이 1081장 발급되므로 서비스 치킨 108마리를 주문할 수 있습니다. 그리고 쿠폰이 1장 남습니다.
- 108마리를 주문하면 쿠폰이 108장 발급되므로 서비스 치킨 10마리를 주문할 수 있습니다. 그리고 쿠폰이 8장 남습니다.
- 10마리를 주문하면 쿠폰이 10장 발급되므로 서비스 치킨 1마리를 주문할 수 있습니다.
1마리를 주문하면 쿠폰이 1장 발급됩니다. - 가지고 있는 쿠폰이 총 10장이므로 서비스 치킨 1마리를 추가로 주문할 수 있습니다.
- 따라서 108 + 10 + 1 + 1 = 120 을 return합니다.
이번 문제는 입출력 예에 해결 방안을 그대로 적어주셨기에 4분 정도 걸렸던 것 같다.
using System;
public class Solution {
public int solution(int chicken) {
int answer = 0;
int stack = chicken % 10;
while (chicken > 0) {
chicken /= 10;
answer += chicken;
stack += chicken % 10;
if (stack > 9) {
answer++;
// 쿠폰 10개로 치킨을 시켜도 쿠폰 1개가 도착하기에 9개를 사용한것과 같기에 -9를 연산한다.
stack -= 9;
}
}
return answer;
}
}
다른 분들의 풀이를 보다 역시 간단한 문제도 더 가독성있고 빠르게 동작하는 코드를 작성하시는 분들이 많다는 것을 느꼈다.
다음 풀이는 말그대로 10개씩 카운트하며 서비스 치킨의 개수를 세는 코드이다.
이렇게 간단하고 쉽운 방법을 보면 나의 코드가 틀린 방법은 아니지만 괜히 어렵게 생각한 것은 아닌지 하는 느낌이 든다.
using System;
public class Solution {
public int solution(int chicken)
{
int coupon = chicken;
int serviceChicken = 0;
while(coupon >= 10)
{
coupon -= 10;
serviceChicken++;
coupon++;
}
return serviceChicken;
}
}
위 코드에서 살짝만 내 스타일로 바꾼다면 이렇게 될 것 같다.
using System;
public class Solution {
public int solution(int chicken)
{
int coupon = chicken;
int serviceChicken = 0;
while(coupon > 9)
{
coupon -= 9;
serviceChicken++;
}
return serviceChicken;
}
}