문제
민수는 같은 반 친구들과 369게임을 하고 있다. 369게임은 여러 명이 원형으로 둘러 앉아 시작 위치의 사람이 1을 외치며 시작된다. 이후 시계방향으로 돌아가며 2, 3, 4와 같이 1씩 증가된 수가 자기 수가 된다. 순서대로 돌아오는 자기 수에 3, 6, 혹은 9가 포함되어 있지 않다면 그 수를 말해야 하며, 3, 6, 혹은 9가 포함되어 있으면 그 개수만큼 박수를 쳐야 한다. 이 규칙을 지키지 못하면 게임이 종료된다.
민수는 369게임이 N까지 규칙을 지키며 진행된다면 그때까지의 들은 박수의 횟수 가 총 몇 번인지 궁금했다. 예를 들어 N = 14라면, 3, 6, 9, 13에서 각각 한 번의 박 수를 치게 되므로 총 4회의 박수를 듣게 될 것이다. N = 36이라면 3, 6, 9, 13, 16. 19. 23. 26. 29. 30. 31. 32. 33. 34. 35, 36에서 박수를 치게 되는데 33, 36에서는 각 각 두 번 박수를 쳐야 하므로 총 18회가 된다. 1 이상의 정수 N에 대하여 369게임을 N까지 규칙을 지키며 진행된다면 그때까지 듣게 되는 박수의 총 횟수를 계산하여 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 정수 N이 주어진다 (1 ≤ N ≤ 10^6).
출력
박수의 총 횟수를 정수로 출력한다.
풀이 과정
N 이 1,000,000 까지 주어지므로 O(N) 으로 진행해도 시간 초과가 나지 않는다.
1부터 N까지 3, 6, 9가 나온 횟수를 세서 출력한다.
import sys
input = sys.stdin.readline
n = int(input().rstrip())
cnt = 0
for i in range(1, n+1):
cnt += str(i).count('3') + str(i).count('6') + str(i).count('9')
print(cnt)
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 2592 : 대표값 ( BRONZE 2 ) / Python (0) | 2023.08.15 |
---|---|
[ BOJ ] 5335 : 화성 수학 ( BRONZE 2 ) / Python (0) | 2023.08.15 |
[ BOJ ] 12790 : Mini Fantasy War ( BRONZE 3 ) / Python (0) | 2023.08.15 |
[ BOJ ] 2959 : 거북이 ( BRONZE 3 ) / Python (0) | 2023.08.15 |
[ BOJ ] 3059 : 등장하지 않는 문자의 합 ( BRONZE 3 ) / Python (0) | 2023.08.15 |