백준 코드 공부/C언어

백준 1673 : 치킨 쿠폰 (C언어)

GUuu9 2021. 12. 5. 19:20

문제

1673번: 치킨 쿠폰 (acmicpc.net)

 

1673번: 치킨 쿠폰

강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환

www.acmicpc.net

 


문제

강민이는 치킨 한 마리를 주문할 수 있는 치킨 쿠폰을 n장 가지고 있다. 이 치킨집에서는 치킨을 한 마리 주문할 때마다 도장을 하나씩 찍어 주는데, 도장을 k개 모으면 치킨 쿠폰 한 장으로 교환할 수 있다.

강민이가 지금 갖고 있는 치킨 쿠폰으로 치킨을 최대 몇 마리나 먹을 수 있는지 구하여라. 단, 치킨을 주문하기 위해서는 반드시 치킨 쿠폰을 갖고 있어야 한다.

입력

여러 줄에 걸쳐서 자연수 n과 k가 주어진다.

출력

각 입력마다 한 줄에 정답을 출력한다.

제한

  • 1 < k ≤ n ≤ 1,000,000,000

예제 입력 1 복사

4 3
10 3
100 5

예제 출력 1 복사

5
14
124

출처

ICPC > Regionals > North America > Rocky Mountain Regional > Alberta Collegiate Programming Contest > ACPC 2000 D번

  • 잘못된 번역을 찾은 사람: doju
  • 빠진 조건을 찾은 사람: eric00513
  • 문제를 번역한 사람: joonas

알고리즘 분류

 


#include<stdio.h>

int main(){
    int n, k, re, sum;
    while(scanf("%d %d", &n, &k) != EOF){
        if(k>1 && k <= n && n <= 1000000000){
            sum = n;
            while(n>=k){
                re = n % k;
                n = n / k;
                sum += n;
                n += re;
            }
            printf("%d\n", sum);
        }
    }
}

풀다보니 계속 틀려서 문제를 계속 봤습니다. 난이도에 비해 정답률이 엄청 저조하더라구요.

EOF 문제에 + 제약 조건설정 + 자잘한 함정(?)이 있었습니다.

while문에서 scanf을 받고 받은 값이 EOF인지 1차 적으로 검사를 합니다.

그 다음 제약 조건에 따라서 if(k>1 && k <= n && n <= 1000000000)로 설정하여 2차 검사를 실행합니다.

이후에는 n마리의 치킨을 주문하고, 추가로 받은 쿠폰을 통해 치킨을 계속 주문할 수 있는 것인데,

추가로 시키고 남은 쿠폰은 버려지지 않고 남아 있는 점에 있습니다.주문하고나서 남을 쿠폰을 re 변수에 잠시 저장하고, n값에 따라 추가로 k 개로 나누어 치킨을 주문합니다.추가 주문된 치킨의 수는 계속해서 sum에 누적을하고 이후 n값에 남아있던 쿠폰을 더해줍니다.

 


Git Hub

BaekJoon-Study/1673 : 치킨쿠폰.c at C · GUuu9/BaekJoon-Study (github.com)

 

GitHub - GUuu9/BaekJoon-Study

Contribute to GUuu9/BaekJoon-Study development by creating an account on GitHub.

github.com