오늘은 다른 걸 해야할 게 많아서 딱 한 문제만 풀고 개인 공부를 하기로 했다.
< BOJ 단계별로 풀기 > 를 차근 차근 따라가고 있는 중이고 오늘까지해서 카테고리 10 - 브루트 포스를 마무리 하려고 했다.
마지막 남은 문제는 바로 1436 - 영화감독 숌 이다.
처음 이 문제를 딱 보자마자 든 생각은
"이게 뭔,,? 어떻게 해야 187일 때 66666 이고 500일 때 166699가 나오지?"
정말 난감하다. 문제를 해석하고 이해하기가 더 어렵다.
생각했던 것 보단 의외로 너무 말도 안되게 간단했다.
절대 이렇게 풀어선 안되지만 브루트포스에 있는 문제니까 브루트포스로 풀어야 하는건데.. 아 그럼 그냥 다 돌면서 체크만 하면 되나? 라는 생각을 했다. 문제를 읽고 이해하는데 쓴 시간이 아까울 정도로 한 3분..? 만에 바로 코드를 짰고 바로 제출했다.
맞췄습니다!!
N = int(input())
i = 0
cnt = 0
answerList = []
while(1):
word = str(i)
if "666" in word:
answerList.append(word)
cnt += 1
if cnt == N:
break
i += 1
print(answerList[-1])
무한 루프(while)로 1부터 무한대? 까지 돌려놓고! 그냥 666이 있을 때마다 제목이 될 수 있는 숫자?(재료)이니까 정답 리스트에 넣어둔다.
그러고 그 배열의 개수가 입력 받은 N개가 되면 젤 마지막 배열의 원소를 출력해주면 해당 제목이 된다.
cnt += 1
if cnt == N:
이렇게 풀었지만 len(answerList) == N 이렇게 풀어도 될 것이다. 이렇게 하면 시간이 더 걸릴것 같아서 (N이 최대 9999니까 브루트포스로 했을 경우) 일부러 cnt를 추가해주면서 했는데 시간이 조금 더 걸린건 맞지만 생각보다 시간 차이는 얼마 크지 않았다.