Algorithm/noj.am
[Python] 백준 1436번 - 영화감독 숌
SweetDev
2021. 11. 15. 02:25
브루트포스로 풀 걸
그래도 생각하는 과정이 할만했던 것 같다...
top을 정의해서 top이 6, 16, 26 처럼 6이 한개이면 last6 = 1, 66, 266처럼 6이 2개이면 last6 = 2.. 이런식으로 커지고
top6가 1이라면 안에서 10번 loop를 돌아서 {top}66{i} 를 프린트 해준다. 6660부터 6669까지 프린트 할 수 있는 이유이다.
마찬가지로 top6가 2이라면 안에서 100번 loop를 돌아서 {top}6{i} 를 프린트 해준다. 66600부터 66699까지 프린트 할 수 있는 이유이다.
이런식으로 top6가 5일때까지 구해줬다.
import sys
N = int(sys.stdin.readline())
count = 1
top = 0
last6 = 0
while count < N:
last6 = 0
top += 1
count += 1
# 6이면 last6: 1, 66이면 last6:2, ...
for t in range(len(str(top))):
if int(''.join(reversed(str(top)))[t]) == 6:
last6 += 1
else:
break
if last6 == 1:
for i in range(10):
if count == N:
print(f"{top}66{i:0>1}")
exit(0)
else:
if i != 9:
count += 1
elif last6 == 2:
for i in range(100):
if count == N:
print(f"{top}6{i:0>2}")
exit(0)
else:
if i != 99:
count += 1
elif last6 == 3:
for i in range(1000):
if count == N:
print(f"{top}{i:0>3}")
exit(0)
else:
if i != 999:
count += 1
elif last6 == 4:
for i in range(10000):
if count == N:
print(f"{top}{i:0>4}")
exit(0)
else:
if i != 9999:
count += 1
elif last6 == 5:
for i in range(100000):
if count == N:
print(f"{top}{i:0>5}")
exit(0)
else:
if i != 99999:
count += 1
if top != 0:
print(f"{top}666")
else:
print("666")