코딩테스트

프로그래머스 - 치킨 쿠폰

오쟝 2023. 8. 1. 22:27

이해하는데 시간이 많이 걸렸습니당~ 이 문장을 가지고 규칙을 만들면

일단 처음 주어지는 쿠폰의 양은 치킨의 양과 같습니!

그리고 쿠폰으로 치킨을 시키게 되면 쿠폰/10개의 치킨을 시킬 수 있습니다!

남은 쿠폰의 양은 쿠폰%10인 것도 알 수 있습니다!!

그럼 다음에 시킬 때 남는 쿠폰의 양은 쿠폰/10 + 쿠폰%10 입니다!!

처음에는 for문을 돌리려고 했는데 돌리는 횟수가 정해져 있지 않기 때문에 while문을 사용했고 조건식에는 더이상 쿠폰을 사용하지 못하는 경우인 coupon이 10보다 작은 경우로 정했습니다!! 즉 coupon>9

 

이를 토대로 코드를 짜게 되면

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int chicken) {
    int answer = 0;
    
    int coupon = chicken;
    int order = 0, last = 0;
    
    while(coupon>9){
        order += coupon/10;
        last = coupon%10;
        coupon = coupon/10 + coupon%10;
    }
    
    return answer = order;
}

입니다!!

 

<코드 설명> chicken = 1081이라 가정

coupon = 1081, order = 0, last = 0

1번째 회전 => order = 108, last = 1, coupon = 109

2번째 회전 => order = 108 + 10, last = 9, coupon = 19

3번째 회전 => order = 108 + 10 + 1, last = 0, coupon = 10;

4번째 회전 => order = 108 + 10 + 1 + 1, last = 0, coupon = 1;

마지막에 coupon이 9보다 크지 않기 때문에 반복문을 탈출합니당~!

 

**

order += coupon/10;을 한 이유 : 새로운 변수를 선언할 수도 있지만 order에 더하는게 더 깔끔하당~ (개인적의견)

coupon이 coupon/10 + coupon%10인 이유 : coupon은 남은 쿠폰 말고도 치킨을 시켜서 받는 쿠폰도 있기 때문에 남는 쿠폰인 coupon%10과 시켜서 받은 쿠폰인 coupon/10을 더해줬당~~

 

어려웠찌만.. 성공! ♪(^∇^*)♪(^∇^*)