BOJ/백준-1436-python

cosmos·2021년 1월 25일
4
post-thumbnail

문제📖

풀이🙏

  • 첫째 줄에 숫자 N이 주어진다.
  • 종말의 숫자는 666이 적어도 3개이상 연속으로 들어간 수를 뜻한다.
  • 종말의 숫자의 예 : 666, 1666, 2666.....
  • 숌이 만든 N번째 영화의 제목에 들어간 숫자를 출력하는 프로그램을 작성하라
    -> 처음엔 n-1 만큼의 수를 앞에 붙이고 666을 뒤에 이어붙이면 된다고 생각해서 아래 수정 전과 같이 str로 입력받아 코드를 짯더니 실패하였다.
    -> 이해가안되서 타 블로그의 풀이를보니 while문으로 푸는걸보고 반복문으로 구현을하였더니 성공하였다.
    -> 아래와같은 방식이면 모든 경우의 수를 계속 반복해야해서 시간적으로도 더 비효율적인데 문제의 의도가 사실 지금도 이해가안된다.
    (문제의 의도를 정확히 아시는분이 있으시다면 댓글로 남겨주신다면 정말 감사하겠습니다.)

코드💻

수정 전

# boj, 1436 : 영화감독 숌, python3
import sys

N = int(sys.stdin.readline())

end = '666'

if N == 0:
    print("end")
else:
    print(str(N-1)+end)

수정 후

import sys

def shun(n):
    end = 666
    while n != 0:
        if '666' in str(end):
            n -= 1
        end += 1
    return end

if __name__ == "__main__":
    n = int(sys.stdin.readline())
    print(shun(n) - 1)

결과😎

출처📝

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

github

github

2개의 댓글

comment-user-thumbnail
2021년 3월 5일

일단 종말의 숫자란 6이 최소 3개 이상 들어간 숫자이고 N 번째 영화의 제목은 종말의 숫자이면서 N번째로 작은 숫자라네요. 예를들면 666, 1666, 2666, 3666, 4666, 5666, 6660, 6661, 6662 이런식으로 진행되는데 5666 다음에 6666 이 되지 않는 이유는 6660 이 더 작은 종말의 숫자이기 때문이예요. 그래서 계속 1씩 더해가며 찾는 거예요. 5666 다음에 1씩 더해서 6660 까지 가야 되기 때문에 6666보다 먼저 조건을 달성(6 이 적어도 3개 이상)을 하게 되는 거져.

1개의 답글