문제
브실이는 하루라도 빨리 대회 출제 자격을 얻기 위해서 1000문제 해결을 목표로 매일 문제를 풀고 있다. 그러다 보니 다른 사람들의 푼 문제 수에 관심이 많다. 사람들은 “저는 총 1000문제 이상 해결하려면 하루에 5문제씩 최소 128일은 더 풀어야 해요”와 같이 자신이 몇 문제를 풀었는지 설명한다. 브실이는 이 말을 들을 때마다 상대방이 현재까지 몇 문제를 풀었는지 궁금해서 참을 수 없었다.
브실이를 도와 상대방이 푼 문제 수의 최솟값과 최댓값을 구해보자.
입력
첫 번째 줄에 양의 정수 가 공백으로 구분되어 주어진다. (1 ≤ N, M, K ≤ 2000)
이는 “저는 총 문제 이상 해결하려면 하루에 문제씩 최소 일은 더 풀어야 해요”라는 의미이다.
문제를 해결할 수 있는 입력은 주어지지 않는다.
일이 지나기 전에출력
위 문장으로 알 수 있는 상대방이 현재까지 푼 문제 수의 최솟값과 최댓값을 공백으로 구분하여 한 줄에 순서대로 출력한다.
풀이 과정
총 N문제 이상 해결하기 위해, 하루에 M문제씩 최소 K일은 더 풀어야 한다면,
풀어야 하는 문제의 최솟값은 M * (K - 1) + 1 문제이다. (M문제씩 (K-1)일 풀고, 마지막에 1문제 더 풀면 끝)
풀어야 하는 문제의 최댓값은 M * K 문제이다. (M문제씩 K일을 더 풀어서 딱 N 문제 맞추기)
이를 이용하여 현재까지 푼 문제 수의 최솟값과 최댓값을 구할 수 있다.
현재까지 푼 문제 수의 최솟값은 N - ( 풀어야 하는 문제의 최댓값 ) 이고, ( N - (M * K) )
현재까지 푼 문제 수의 최댓값은 N - ( 풀어야 하는 문제의 최솟값 ) 이다. ( N - (M * (K - 1) + 1 )
만약 이렇게 계산한 현재까지 푼 문제 수의 최솟값, 최댓값이 음수라면,
아무 문제도 안 풀었다는 뜻이니 0을 출력한다.
C
#include <stdio.h>
int main(void) {
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
int min = n - (m * k);
int max = n - (m * (k - 1) + 1);
if (min < 0) printf("0 ");
else printf("%d ", min);
if (max < 0) printf("0 ");
else printf("%d ", max);
return 0;
}
Python
n, m, k = map(int, input().split())
print(max(n - (m * k), 0), max(n - (m * (k - 1) + 1), 0))
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 5585 : 거스름돈 ( BRONZE 2 ) / C, Python (0) | 2023.10.03 |
---|---|
[ BOJ ] 28444 : HI-ARC=? ( BRONZE 5 ) / C, Python (0) | 2023.10.03 |
[ BOJ ] 23825 : SASA 모형을 만들어보자 ( BRONZE 4 ) / C, Python (0) | 2023.10.03 |
[ BOJ ] 1402 : 아무래도이문제는A번난이도인것같다 ( SILVER 5 ) / C, Python (0) | 2023.10.03 |
[ BOJ ] 2355 : 시그마 ( BRONZE 2 ) / C, Python (0) | 2023.10.03 |