알고리즘/프로그래머스 1단계

프로그래머스 - 치킨 쿠폰 - C++

게임만드는학생 2023. 8. 24. 19:50

https://school.programmers.co.kr/learn/courses/30/lessons/120884

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

int solution(int chicken) {
    int answer = 0;
    
    int cnt=chicken;
    while(cnt>=10)
    {
        answer+=cnt/10;
        cnt = cnt % 10 + cnt/10;
    }
    
    return answer;
}

 

설명

지금까지 시켜먹은 치킨의 수가 chicken 에 들어있고 이를 통해서 서비스 받을 수 있는 치킨의 총 수를 구하는 문제이다.

서비스받는 치킨도 쿠폰이 발급되며 쿠폰 10장당 1마리가 서비스로 제공된다. 

 

따라서 

1. 현재 받을 수 있는 서비스 치킨의 수를 구한다.

2. 남은 쿠폰 수 + 서비스 치킨의 수를 구한다. => 남은 쿠폰의 총 개수

3. 다시 현재 받을 수 있는 서비스 치킨의 수를 구한다. 

이 과정을 무한으로 반복하다가 쿠폰 개수가 10개 미만이 되면 더 이상 서비스를 받을 수 없게 된다. 

 

cnt 변수로 현재 쿠폰의 개수를 저장하고 이 cnt변수가 10개미만이면 while문을 종료시킨다. 

answer+=cnt/10;
cnt = cnt % 10 + cnt/10;

먼저 현재 받을 수 있는 서비스 치킨의 수는 cnt/10으로 구할 수 있다. 

예를 들어, 99마리면 9마리의 서비스를 받는다. 이 수를 answer에 더한다. 

그리고 쿠폰 9개가 남는다. 이는 cnt%10 으로 구할 수 있다.

서비스 받은 치킨의 수 만큼 쿠폰은 증가하고 이는 cnt/10 이다.

따라서 서비스를 받을 수 있는 만큼 받은 후, 쿠폰의 수는

cnt%10 + cnt/10 개 이다. 

 

이를 while문으로 반복하면 결과적으로 answer에 답이 저장된다.