티스토리 뷰

알고리즘

백준 1436 - 파이썬

취뽀가자!! 2024. 1. 19. 22:24

https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워

www.acmicpc.net

문제 풀이

이번 문제는 이해하는데 시간이 걸렸다. 2번째 시리즈는 1666, 3번째는 2666 이렇게 666 앞에 있는 숫자가 하나씩 증가한다는 것은 이해했으나 입력이 500일때 왜 166699가 나오는지 이해를 못했다. 잘 생각해 보니 666이 포함된 숫자의 500번째가 166699라는 것을 알 수 있었고, 구현이 어려워 보이지 않아 바로 코드를 작성해 봤다.

 

n = int(input())
cnt = 0
res = 666

while True:
    if '666' in str(res): # 666이 포함된 수라면 cnt 증가
        cnt += 1
    if cnt == n:
        break
    res += 1

print(res)

 

파이썬은 in 키워드를 이용하면 배열이든 문자열이든 원하는 것이 존재하는지 알아내기 쉽기 때문에 간단히 작성할 수 있었다.

 

다른 풀이는 없을까 싶어 구글링을 해 봤는데 파이썬은 대부분의 사람들이 파이썬 문법을 활용하여 푼 모습이었고, c++를 사용한 사람들 중에서는 다른 방식으로 푼 사람이 있었다.

 

n = int(input())
result = 665
cnt = 0

tmp = 0
while n != cnt:
    result += 1
    tmp = result

    while tmp != 0:
        if tmp % 1000 == 666:
            cnt += 1
            break
        else:
            tmp //= 10

print(result)

 

현재 숫자에 666이 포함되어 있는지 확인하기 위해 일의 자리를 계속 없애면서 확인한 모습이다.

예를 들어 13566698 이라는 숫자가 있을 때, 10으로 나누면 몫은 1356669이고, 나머지는 8이 된다. 여기서 나머지가 일의 자리이므로 버려주면 된다. 이를 반복하면 135666이 되고, 이를 1000으로 나눈 나머지는 666이 되므로 해당 수 안에 666이 들어 있음을 알게 되는 것이다.

 

느낀점

이번 문제는 예제가 이해를 돕기에 부족한 느낌이었다. 7번째 8번째 입력 예제를 보여줬으면 이해가 더 빨라겠지만 그러지 않았기 때문이다. 하지만 이런 문제도 잘 보고 이해하고 푸는 것이 알고리즘의 묘미 아닌가 싶다. 또한 브루트포스 문제들을 풀면서 느낀 점은 인간은 한번에 알아낼 수 있는 규칙이나 공식들을 컴퓨터는 모든 경우의 수를 다 탐색해 봐야 알 수 있는 문제들이 많다는 것을 알게 되었다. 물론 규칙이나 공식을 코드에 잘 녹여내어 풀 수 있는 문제들도 있지만 말이다. 아직은 인간의 방식으로 알고리즘 문제를 풀어내려는 관성이 남아있는데 컴퓨터의 방식으로 풀어내야 할 때는 이를 적절히 잘 활용하는 능력을 알고리즘 문제들을 풀면서 길러나가야 되겠다는 생각이 든다.

'알고리즘' 카테고리의 다른 글

백준 1789 - 파이썬  (0) 2024.02.05
백준 2839 - 파이썬  (2) 2024.01.25
백준 1018 - 파이썬  (0) 2024.01.17
백준 19532 - 파이썬  (2) 2024.01.15
백준 24313 - 파이썬  (0) 2024.01.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함