1부터 10000까지 숫자들 중 8의 개수 찾기 예제 (파이썬)

이 포스트에서는 파이썬의 반복문 예제 중 하나로 1부터 10000까지의 숫자 범위 안에서 8의 개수를 모두 찾아내는 알고리즘을 포스팅합니다.

구글 입사시험 문제 중에 다음과 같은 문제가 있었습니다.

1부터 10,000까지의 숫자 중 8은 모두 몇 번 나오는지 구하시오. 단, 8이 두 개 이상 나오는 숫자는 그 8의 개수대로 계산하시오. (예: 88은 2개로, 888은 3개로 계산)

이 문제의 답은 ‘4,000개’인데 그 이유는 이렇습니다.
먼저 마지막 숫자인 10,000에는 8이 없으므로 무시하고 1부터 9,999까지의 숫자들 중에서 찾으면 되는데 XXX8(일의 자리 숫자가 8)로 가능한 모든 경우의 수를 찾으면 XXX(천의 자리부터 십의 자리까지)에 들어갈 숫자들은 0부터 999까지 1,000개. XX8X(십의 자리 숫자가 8)와 X8XX(백의 자리 숫자가 8)와 8XXX(천의 자리 숫자가 8)도 모두 같으므로 1,000 × 4 = 4,000이므로 답은 4,000개라는 결론이 나옵니다.

이 문제를 파이썬 코드로 만들어서 풀어 보면 다음과 같습니다.

s = 0
for i in range(1, 10001):
	s += str(i).count("8")
print(s)

1번 줄에서 합계를 저장할 변수 s를 정의합니다. 0인 상태에서 시작해야 하므로 당연히 0을 대입합니다.

2번 줄은 for range 반복문인데, range(start, end) 형식으로 씁니다. 주의할 점은 이 range 함수의 경우 마지막 값보다 1 작은 값에서 끝이 난다는 점입니다. 그렇기 때문에 실질적인 마지막 값보다 1 더 큰 값을 넣습니다. 예를 들어 range(1, 10)의 경우는 1부터 9까지만 반복하므로 만약 10도 포함하고 싶다면 range(1, 11)로 작성합니다.

3번 줄은 1부터 10,000까지 반복되는 i를 문자열화하여 그 안에서 “8”이라는 문자의 개수를 s에 더합니다.

그리고 반복이 끝나면 4번 줄에서 s의 값을 출력합니다. 이렇게 하고 실행해 보면,

4000

이와 같이 출력됩니다.

답글 남기기

이메일 주소는 공개되지 않습니다.