#1436

zzwwoonn·2022년 5월 10일
1

Algorithm

목록 보기
18/71

오늘은 다른 걸 해야할 게 많아서 딱 한 문제만 풀고 개인 공부를 하기로 했다.

< 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를 추가해주면서 했는데 시간이 조금 더 걸린건 맞지만 생각보다 시간 차이는 얼마 크지 않았다.

0개의 댓글