백준 1105번
https://www.acmicpc.net/problem/1105
문제
후기
근래 풀었던 문제 중, 정답 비율이 상당히 낮은 문제에 속했다.
L ~ R 사이의 숫자 중에서 8이 아예 나오지 않는 경우의 수에는 무조건 0을 출력하면 된다를
기본적인 개념으로 생각했다. L의 길이가 R의 길이보다 짧으면 무조건 8이 아예 없는 경우를
찾을 수 있었다.
EX)
L=8 R= 61 -> 9
L= 35 R= 150 -> 67
L= 888 R = 8888 -> 999
다음으로는 가장 적게 들어있는 경우에 대해서다. 이는
L의 맨 앞자리가 R이랑 다른 경우, 바로 반복문을 탈출하여 0을 출력할 수 있게 하였고,
그렇지 않다면 앞자리 부터 8의 개수를 세면서 최종적으로 출력할 수 있게 만들었다.
L이 789고 R이 899 라고 했을 때, 앞자리가 다른 순간 바로 790 이라는 수를 만들 수 있기 때문이다.
떠올리는 과정이 난해했을 뿐 구현 자체는 어렵지 않은 문제였다.
나의 풀이
import sys
input = sys.stdin.readline
L, R = map(str,input().split())
cnt = 0
if len(L) != len(R):
print(0)
else:
for i in range(len(L)):
if L[i] != R[i]:
break
else:
if L[i] == "8":
cnt +=1
print(cnt)