본문 바로가기
Problem Solving/백준

[백준] 1436번 : 영화감독 숌

by shinbian11 2020. 2. 29.

https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조

www.acmicpc.net

#include <stdio.h>
int end[10001];//종말 숫자 배열
int main()
{
	int num;
	scanf("%d", &num); 
	int i = 1;
	int new_i;
	int idx = 0;
	while (idx != 10000)
	{
		int cnt = 0;
		new_i = i;
		while (new_i != 0)
		{
			if (new_i % 10 == 6) //연속해서 6이 나오면 cnt증가, 나오지 않으면 cnt = 0 으로 초기화
				cnt++;
			else
				cnt = 0;
			new_i /= 10;

			if (cnt == 3) //cnt == 3 : 종말 숫자이면 (6이 연속해서 3개 나오는 수라면)
			{
				end[idx] = i; //종말 숫자 배열에 넣고 인덱스 증가
				idx++;
			}
		}
		i++;
	}
	printf("%d\n", end[num-1]); 
}

나름대로의 해석을 달아봤습니다.

 

 

=> i를 1부터 증가시키면서 i가 종말숫자인지 아닌지 판별한다.

 

=> i를 일의자리, 십의 자리, 백의 자리... 처럼 자릿수 하나하나를 분리시키면서 그 수가 6이라면 cnt를 증가시킨다.

 

=> 그렇게 해서 cnt가 3이라면 종말숫자이기 때문에(6이 연속으로 3개 나왔다는 뜻)

     종말숫자만 담아놓은 end배열에 넣어두고 idx를 증가시킨다.

 

=> 물론 6이 연속해서 3개가 나오는 경우도 종말숫자이지만, 3개 이상 나와도 종말숫자라고 문제에서 알려줬기 때문에, if (cnt == 3)을 if (cnt >= 3) 이라고 고쳐도 된다.

 

=> 물론 그렇게 된다면 idx++; 바로 밑에 break; 문을 추가시켜야 한다. cnt가 3이상인걸 확인하자마자 end배열에 그 수를 담고 반복문을 빠져나와야 하기 때문!

=>이 과정을 end의 인덱스인 idx가 10000이 되기 전까지 반복한다.

    다시 말해, 종말 숫자가 (작은 순서대로) 10000개가 저장될때까지 반복한다.

 

 

'Problem Solving > 백준' 카테고리의 다른 글

[백준] 10996번 : 별 찍기 - 21  (0) 2020.03.15
[백준] 2523번: 별 찍기 - 13  (0) 2020.03.15
[백준] 1932번 : 정수 삼각형  (0) 2020.02.25
[백준] 2751번 : 수 정렬하기 2  (0) 2020.02.24
[백준] 10773번 : 제로  (0) 2020.02.24