[BOJ] 1436. 영화감독 숌

Jimeaning·2023년 5월 8일
1

코딩테스트

목록 보기
93/143

Python3

문제

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

키워드

  • 브루트포스
    => 브루트포스(brute: 무식한, force: 힘)
    완전탐색 알고리즘. 즉, 가능한 모든 경우의 수를 모두 탐색하면서 요구조건에 충족되는 결과만을 가져온다.

문제 풀이

문제 요구사항

  • 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수이다 (666, 1666, 2666, ...)
  • N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 수) 와 같다.
  • 숌이 만든 N번째 영화의 제목에 들어간 수를 출력하는 프로그램

변수 및 함수 설명

  • n : n번 째 영화의 제목 (10,000보다 작거나 같은 자연수)
  • six : 첫 종말의 수 (666)
  • cnt : 666이 포함된 수를 카운트하는 변수

풀이

666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662, ⋯, 6669, 7666, 8666, 9666, ⋯

처음에는 666을 기준으로 맨 앞자리만 바뀌다가 5666 다음 큰 수는 6666이 아니라 6660부터 시작한다.

따라서 계속 하나씩 수를 늘려가다가 666이 포함된 수면 카운트하고 아니면 지나간다.


(입력 및 선언)

  • n번 째 수를 입력 받는다
  • 첫 종말의 수인 666을 six 변수 안에 넣는다.
  • 666이 포함된 수를 카운트할 cnt를 선언한다.

(무한 반복문)

  • 만약 문자 '666'이 문자 six 안에 포함되어 있다면,
    • 카운팅한다(cnt++)
    • 이때 만약 cnt 값이 찾는 n이라면, six 값을 출력하고 반복문을 빠져 나온다.
  • 포함되어 있지 않으면 계속 six 값을 1씩 증가시킨다.

six는 정수형으로 입력 받아서 1씩 늘려가며 값을 변화시킨다.
한편 666이 있는지 판단할 때는 문자형을 활용하는 것이 편하다.

최종 코드

n = int(input())
six = 666
cnt = 0

while True :
    if '666' in str(six) :
        cnt += 1
        if cnt == n :
            print(six)
            break
    six += 1
profile
I mean

0개의 댓글