상세 컨텐츠

본문 제목

백준 1436번 영화감독 숌 C++

공부/C & C++

by E루기 2020. 12. 12. 17:16

본문

www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타

www.acmicpc.net

 

#include <stdio.h>

bool check_666(int num) {
	while (num >= 666) {
		if (num % 1000 == 666) return true;
		num /= 10;
	}
	return false;
}

int main() {
	int n, progression; scanf("%d", &n);
	if (n <= 19) progression = 666;
	else if (n <= 280) progression = 10666, n -= 19;
	else if (n <= 3700) progression = 100666, n -= 280;
	else if (n <= 7400) progression = 1000666, n -= 3700;
	else progression = 2000666, n -= 7400;
	while (true) {
		if (check_666(progression)) {
			if (--n == 0) break;
		}
		progression++;
	}
	printf("%d\n", progression);

	return 0;
}

손으로 계산해본 결과 N이 10000일 때 2~3백만 정도 된다는 것은 알아서 1부터 돌릴까 생각했지만 그렇게 하면 시간이 너무 오래 걸릴 것 같아서 자릿수별로 나눴다.

100자리수는 666

1000자리수는 1666 2666 3666 ... 5666 6660 6661 6662 6663 ... 6669 7666 8666 9666로 18개

10000자리수는 1000자리수 앞에 1~5, 7~9가 붙은 것 -> 8 * 19(1000자리수 18개와 0666)

6만대는 60666, 61666 ... 65666까지와 67666, 68666, 69666으로 9개.

그리고 666XX. 666XX에는 66600 ~ 66699까지 총 100개가 들어갈 수 있다.

만의 자리수는 총 261개로 100,000자리수가 시작되기 위해서는 261 + 19 = 280개

N = 281일때 가장 작은 십만 자리수가 된다.

 

이런 식으로 자릿수별로 나누었는데 오히려 코드가 더 지저분해 보이는 것 같다.

시간문제라면 3700, 7400 정도로만 나눠도 됐을 것 같기도 하다.

'공부 > C & C++' 카테고리의 다른 글

백준 14888번 연산자 끼워넣기 C/C++  (0) 2020.12.19
백준 14502번 연구소 C  (0) 2020.12.15
백준 7568번 덩치 C++  (0) 2020.12.11
백준 2231번 분해합 C++  (0) 2020.12.11
백준 2798번 블랙잭 C++  (0) 2020.12.11

관련글 더보기

댓글 영역