2025-03-27 18:45:44

사실 이문제는 쉬운문제라 글쓸생각은 없었는데 문제가 헷갈리는 부분이 많아서 작성한다.

import sys

arr=sys.stdin.readline().rstrip()
v=[0]*(len(arr)+1)
v[0]=1
v[1]=1

for i in range(2,len(arr)+1):
    v[i]+=v[i-1]
    if int(arr[i-2])*10+int(arr[i-1])<=34:
        v[i]+=v[i-2]
print(v[len(arr)])

이렇게하고 제출했더니

틀렸다고 나왔다.

 

처음에 저런식으로 코드를 작성한 이유는 1부터 34니까 0이 안나오니 0을 아예 처리하지 않아도 되겠네? 라는 발상이었었고

문제를 다시 잘읽어보면 알겠지만 0은 나올수밖에 없다 왜냐면 1부터 34라고 했지 0이 포함된 숫자(예를들어 10,20,30)은 안나온다고 한적이 없기때문이다.

이부분을 예외처리하면 무난하게 통과될듯하다.

또 0앞에 4이상의 수 또는 0이 오는 경우 숫자를 완성할 수 없게 되는데 이경우 문제에서 1부터34라고 했으니 나올리 없을것이라 생각하고 작성하면 될듯하다.

import sys

arr=sys.stdin.readline().rstrip()
v=[0]*(len(arr)+1)
v[0]=1
v[1]=1

for i in range(2,len(arr)+1):
    if arr[i-1]!='0':
        v[i]+=v[i-1]
    if int(arr[i-2])*10+int(arr[i-1])<=34:
        v[i]+=v[i-2]
print(v[len(arr)])

근데 또 틀렸다.

생각해보니 십의 자리수에 0이들어오는 케이스를 놓쳤다.

import sys

arr=sys.stdin.readline().rstrip()
v=[0]*(len(arr)+1)
v[0]=1
v[1]=1

for i in range(2,len(arr)+1):
    if arr[i-1]!='0':
        v[i]+=v[i-1]
    if arr[i-2]!='0' and int(arr[i-2])*10+int(arr[i-1])<=34:
        v[i]+=v[i-2]
print(v[len(arr)])

조건에 주의하자

'IT > ps' 카테고리의 다른 글

백준 14502번 연구소  (0) 2025.04.11
백준 1941번 소문난 칠공주  (0) 2025.04.05
백준 1351번 무한수열  (0) 2025.03.15
백준 1446번 지름길  (0) 2025.03.10
백준 18353번 병사 배치하기  (0) 2025.03.10