archive
[백준] 영화감독 숌 (Python) 본문
✏️ 문제
1436번: 영화감독 숌
666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타
www.acmicpc.net
✏️ 풀이
666이 들어가는 N번째 수를 구하는 문제이다.
1666, 2666, 3666, 4666, 5666, 6661,,, 6666,,,7666,,
이렇게 666 앞에 들어가는 수가 6으로 끝날 경우 위와 같이 규칙이 달라지므로 따로 처리해줘야한다.
예를 들어, 15666에서 16666으로 넘어갈 때 6으로 끝나므로
15666
16661
16662
기존의 6을 떼주고 666뒤에는 1부터 9까지 붙여준다.
56669
66601
...
66699
이와 같이 6의 길이가 두자리이면 1부터 99까지 두자리를 유지하며 붙여줘야한다.
아래는 이를 구현한 코드이다.
✏️ 코드
def six_range(arr):
count = 0
for six in arr[::-1]:
if six != '6':
break
count += 1
return count
n = int(input())
if n==1:
print('666')
else:
x = 1
cnt = 1
while True:
length = six_range(str(x))
if length > 0:
for i in range(pow(10,length)):
ans = str(x)[:len(str(x))-length] + '666' + str(i).zfill(length)
cnt += 1
if cnt==n:
break
else:
ans = str(x) + '666'
cnt += 1
if cnt==n:
break
x += 1
print(ans)
매우.. 복잡하다..ㅎ
✏️ 다른 사람 풀이
N = int(input())
movie = 666
while N:
if "666" in str(movie):
N -= 1
movie += 1
print(movie - 1)
브루트포스로 풀이한 코드이다.
666부터 차례대로 증가시키면서 666을 포함한 숫자를 n번 만날 때까지 실행한다.
✏️ 생각
너무 복잡하게 풀었나 생각....
풀이 자체는 엄청엄청 복잡하지만.. 시간 복잡도는 차이가 크게 나긴 한다.
그치만 풀이가 복잡하다보니 규칙 알아내고 구현하는데 시간이 너무 많이 걸린다는 점..
N을 10000을 넣었을 때 답이 2666799이기 때문에
결론적으로는 브루트 포스 알고리즘을 쓰는 편이 구현 시간 면에서는 훨씬 좋은 선택이었다는.. 결론...또륵
코테때는 브루트 포스로 한 번 시도해보고 시간 초과되면 다른 규칙을 찾는 것이 좋을 것 같다!
'STUDY > 알고리즘' 카테고리의 다른 글
[백준] 터렛 (Python) (0) | 2021.03.08 |
---|---|
[백준] 골드바흐의 추측 (Python) (0) | 2021.03.08 |
[백준] 소수 구하기 (Python) (0) | 2021.03.04 |
[백준] A+B - 4 (Python) (0) | 2021.03.01 |
[백준] 나머지 (Python) (0) | 2021.03.01 |