[Bronze II] 벼락치기 - 25373

문제 링크

성능 요약

메모리: 1112 KB, 시간: 0 ms

분류

수학, 많은 조건 분기

제출 일자

2026년 04월 25일 22:04:59

문제 설명

부산사이버대학교에 다니는 대희는 강의 영상 보는 것을 매일 미뤘다. 오늘은 중간고사가 일주일 남은 날이다. 대희는 더 이상 미루면 큰일이 날 것 같아서 오늘부터 밀린 영상을 보기로 했다. 그런데 아직 정신을 못 차린 대희는 영상을 본 다음 날은 그 전날보다 영상을 적게 본다. 이때 영상을 모두 듣기 위해 첫날 들어야 하는 영상의 개수 중 가장 작은 값을 출력하자.

영상을 하나도 보지 않은 날부터는 계속 영상을 보지 않는 것에 유의하자.

입력

밀린 영상 개수 $N$이 주어진다.

출력

첫날 봐야 하는 영상의 개수 중 가장 작은 값을 출력한다.


💡 해결 방법

💻 코드

#include <stdio.h>
#include <stdlib.h>
//https://www.acmicpc.net/problem/25373
 
unsigned long long check(unsigned long long a)
{
	int sum = 0;
	if(a >= 7)
		return (7 * a - 21);
	else{
		for(int i = 0;  a > 0 && i < 7; i--)
		{
			sum += a;
			a--;
			}
		}	
	return sum;
}
 
int main(int argc, char *argv[])
{
	unsigned long long n;
	scanf("%llu", &n);
	
	unsigned long long  left = 1;
	unsigned long long right  = n;
	unsigned long long result = 0;
	
	
	while(left <= right){
		unsigned long long mid = (left + right) / 2;
		 if(n <= check(mid))
		{
			result = mid;
			right = mid - 1;
			}
		else
		{
			left = mid + 1;
		}
	}
 
	printf("%llu\n", result);
 
	return 0;
}