프로그래밍/Algorithm

백준 1105 팔 파이썬

모지사바하 2021. 3. 16. 11:40

www.acmicpc.net/problem/1105

 

1105번: 팔

첫째 줄에 L과 R이 주어진다. L은 2,000,000,000보다 작거나 같은 자연수이고, R은 L보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

L, R = map(int, input().split())
ans = 0

if len(str(L)) != len(str(R)):
    print(0)
else:
    L_str = str(L)
    R_str = str(R)
    if L_str[0] != R_str[0]:
        print(0)
    else:
        if L_str[0] == '8':
            ans+=1
            
        for i in range(1, len(L_str)):
            if L_str[i] != R_str[i]:
                break
            else:
                if L_str[i] == '8':
                    ans+=1
        print(ans)
# 800 899
# 8808 8880
    

 

처음엔 역시 또 멍했다.. 어떻게해야하나..

우선 생각할 수 있는것부터 하나하나 생각해보기로 했다. 

가장 쉽게 생각할 수 있는 자릿수가 다른 경우는 어떤지에 대해서 생각하는걸로 첫단추를 꿰니 이후부턴 제법 머리가 돌아가기 시작했다.

우선 자릿수가 다른 경우는 무조건 8 이 들어가는 최소횟수는 0이다. 직접 대입해보면 쉽게 알 수 있다.

그 다음, 첫째 자리의 숫자가 다른 경우 역시 8이 들어가는 최소횟수는 0이다.

그 다음 부터 각 자리의 숫자가 다른 경우는 이전까지 누적된 8의 횟수가 최소횟수이므로 더이상 비교할 필요가 없다.

예를 들어

L = 80008, R = 88888

인 경우,

[8]0008, [8]8888 첫자리가 같으므로 무조건 8이 한번은 나온다. ans = 1

8[0]008, 8[8]888 둘째자리가 틀리므로 뒷자리는 볼 필요도 없다. 정답은 1

 

문제를 보고 멍할때 우선 생각할 수 있는 가장 간단한 케이스가 뭐가 있는지.. 시작하는걸로 첫단추를 끼우자. 그럼 그 다음 단추는 비교적 쉽게 떠오른다.