이 문제는 2억개의 수를 가지고 문제를 푸는 것이다.
모든 것을 확인하게 된다면 천만개에 1초니깐 20초가 걸리게된다.
따라서 예외처리를 해줘야 하겠다.

첫 번째 생각.
숫자 자리수가 1개이상 차이나게 된다면
ex ) 99, 100 이런식으로 만들어 지게된다.
자리수가 넘어갈 때, 처음 수는 10의 배수이므로 8이 들어가는 개수가 0개이다.
: 이방법으로 1,000,000,000-1, 과 2,000,000,000를 비교할 때가 가장 많은 수를 비교하는 과정이된다.
즉, 최대 시간 소모가 10초로 줄어들게 된다.
두 번째 생각
숫자 자리수가 동일한 경우
ex) 8800, 8808 이라면 앞자리 수 부터 확인해서 같은 숫자일때까지만 8의 개수를 체크한다.
비교하는 값이 달라지면 그 뒷자리 수부터는 8을 제외한 다른 숫자를 사용할 수 있기 때문이다.
즉, O(1)으로 줄어들게된다.
: 이렇게 구성했을 경우 1,000,000,000 과 1,000,000,001을 비교할 때가 가장 많은 수를 비교하는 과정이 된다.
즉 숫자 9개만 비교하면 되는 문제가 되버린다.
세 번째 생각
만약 숫자가 같다면
해당 숫자에서 8의 개수를 세면된다.
이것은 L,R을 비교하는 과정까지 줄이기 위해서 사용했다.
따라서 내가 선택한 코드는
import sys
input = sys.stdin.readline
# 1105 팔
L, R = map(str, input().split())
ans = 0
if L == R:
for i in range(len(L)):
if L[i] == '8':
ans += 1
print(ans)
elif len(R) - len(L) >= 1:
print(0)
else:
for i in range(len(L)):
if L[i] != R[i]:
break
if L[i] == '8':
ans += 1
print(ans)
'알고리즘' 카테고리의 다른 글
1563 개근상 파이썬으로 풀기 (0) | 2023.12.29 |
---|---|
159993 미로탈출(프로그래머스) (0) | 2023.11.01 |
백준(2839) 설탕 배달 .java, python (0) | 2023.10.25 |
케빈 베이컨의 6단계 법칙 알고리즘 풀이 자바 (1) | 2023.10.10 |