https://www.acmicpc.net/problem/27494
1 이상 n 이하의 정수인 시리얼 번호가 적혀 있다.2023을 만들 수 있으면 해당 티켓은 당첨 티켓쉽게 말해서 n이 주어지면 1부터 n까지 순회해서 숫자 안에 2023이 존재한다면 당첨 티켓으로 구분한다는 것입니다.
그리고 2023이 포함되어 있는 티켓이 몇 장있는지 출력하면 됩니다.
우선 티켓에 2023이 포함되려면 최소 숫자가 2023이 되어야 하므로 2023보다 작은 수는 탐색하지 않아줍니다.
def func(n):
if n < 2023:
return 0
2023을 어떻게 찾을까 하다가 문자열로 선언하고 각 자릿수가 발견될 때마다 인덱스 값을 증가시켜 인덱스가 3을 넘어가면(2023의 인덱스는 최대 3이기 때문) 2023이 존재한다고 판단하는 방식을 이용했습니다.
target = '2023'
cnt = 0 # 당첨 티켓 수
for i in range(2023, n+1): # 2023부터 n까지
idx = 0 # target의 인덱스
for j in str(i): # 각 자릿수에 접근해야 되기 때문에 문자열로 변환
if j == target[idx]: # 자릿수가 2023과 일치한다면
idx += 1 # 인덱스 증가
if idx == 4: # 인덱스가 3을 넘어간다면
cnt += 1 # 당첨 티켓 수 증가
break # 판별이 됐다면 반복문 종료
return cnt # 당첨 티켓 수 리턴
import sys
input = sys.stdin.readline
def func(n):
if n < 2023:
return 0
target = '2023'
cnt = 0
for i in range(2023, n+1):
idx = 0
for j in str(i):
if j == target[idx]:
idx += 1
if idx == 4:
cnt += 1
break
return cnt
if __name__ == "__main__":
n = int(input())
print(func(n))