리셋 되지 말자

[백준 1436] 영화감독 숌 - 브루트포스 본문

알고리즘

[백준 1436] 영화감독 숌 - 브루트포스

kyeongjun-dev 2021. 12. 22. 16:18

코드1

from collections import Counter

n = int(input())
cnt = 0
num = 1
while cnt != n:
    ls = list(str(num))
    cd = Counter(ls)
    if cd.get('6') and cd['6'] >= 3:
        idx_save = []
        for idx, c in enumerate(ls):
            if c == '6':
                idx_save.append(idx)
        start = idx_save[0]
        cnt_6 = 0
        for i in range(1, len(idx_save)):
            if start+1 == idx_save[i]:
                cnt_6 += 1
                start = idx_save[i]
                if cnt_6 == 2:
                    cnt+=1
            else:
                start = idx_save[i]
                cnt_6 = 0

    num += 1
    
print(num-1)

 

 

결과

 

설명

  • num을 1부터 1씩 증가시키면서 검사를 시작한다. 사실 666부터 시작해도 된다.
  • num을 str()로 문자열로 변경한 뒤, list()로 llist로 변경한 뒤, Counter로 만든다. 그리고 6이 있는지, 있다면 6이 3개 이상인지 확인한다.
  • num이 6을 3개 이상 가지고 있다면, 이제 모든 6의 위치 index를 idx_save에 저장한다.
  • idx_save를 검사를 하는데, 연속된 3개의 수(수:6의 위치 index)가 있는지 검사한다. 만약 연속된 3개가 있다면 cnt를 1 증가시킨다.
  • cnt가 n과 같아질 때까지 반복한다.

 

후기

666을 가운데에 두고, 양쪽에 숫자를 1씩 증가시키면서 붙이는 방법을 생각했었는데 잘 되지않아서 그냥 브루트 포스로 변경했다.

 

코드2

n = int(input())
cnt = 0
num = 1
while cnt != n:
    if '666' in str(num):
        cnt += 1
    num += 1
print(num-1)

 

결과

간단하게 풀 수 있는 문제였다...

Comments