티스토리 뷰

>문제

[중략]

종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.

따라서, 숌은 첫 번째 영화의 제목은 세상의 종말 666, 두 번째 영화의 제목은 세상의 종말 1666 이렇게 이름을 지을 것이다. 일반화해서 생각하면, N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다.

숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하시오. 숌은 이 시리즈를 항상 차례대로 만들고, 다른 영화는 만들지 않는다.

 

[입력]

첫째 줄에 숫자 N이 주어진다. N은 10,000보다 작거나 같은 자연수이다.

 

> 핵심

나머지, 나누기 연산 활용하기

>풀이과정

처음에는 어? 이거 그냥 반복문 돌면서 하나하나 세면 되는거 아니야? 하고 쉽게 생각하다가

왠지 모르게 이외에 다른 수학적인 방법이 있지 않을까 하며 괜히 쓸데없는 고민을 했던 문제.. ㅋㅋㅋ

암만 생각해도 마땅히 창의적인 방법이 안떠올라서 그냥 처음 생각난 방식대로 풀었다.

 

가끔은 가장 처음 떠올린 생각이 가장 최선의 생각일 수도 있다.

 

그냥 666부터 1씩 올려가면서 6이 세번이상 연속해 나오는 경우 cnt를 증가시키면서 올라가면 되는 간단한 문제였다.'

 

>깨달은 점

1. 쉬운건 쉽게 가자. 괜히 복잡하게 생각하지 말고..

 

>코드

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


int main()
{
	int n, i, cnt = 0, six_cnt = 0, num = 666, tmp;
	scanf("%d", &n);

	while (cnt < n)
	{
		six_cnt = 0;
		tmp = num;

		while (tmp > 0)
		{
			if (tmp % 10 == 6)
				six_cnt += 1;
			else
				six_cnt = 0;

			if (six_cnt >= 3)
				break;

			tmp /= 10;
		}

		if (six_cnt == 3)
		{
			cnt += 1;
		}

		num += 1;
	}

	printf("%d", num - 1);
	return 0;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함