[백준/파이썬] 27494번: 2023년은 검은 토끼의 해

수박강아지·2025년 5월 6일

BAEKJOON

목록 보기
66/174

문제

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))

0개의 댓글