※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 27494번 문제인 2023년은 검은 토끼의 해이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/27494 

 

27494번: 2023년은 검은 토끼의 해

흑묘 복권의 티켓 수 $N$이 주어진다. $(1 \leq N \leq 10\,000\,000)$

www.acmicpc.net

어떤 수가 당첨티켓의 번호인지를 확인하는 것은 각 수를 문자열로 생각했을 때 첫자리부터 순서대로 살펴보면서 "2023"을 만들기 위해 남은 필요한 첫번째 자리를 반복해서 탐색해나가는 것을 시도하는 것으로 해낼 수 있다.

 

당첨티켓인지를 확인할 티켓의 번호는 항상 8자리 이하이고 확인해야 할 티켓의 개수는 많아야 1000만개이므로(입력제한), 1부터 N까지의 모든 정수를 하나하나 당첨티켓의 번호로 가능한 정수인지 확인하는 것으로 문제를 충분히 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
using namespace std;

int N, ans;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> N;
	for (int i = 1; i <= N; i++) {
		string s = to_string(i);
		int slen = s.length(), idx = 0;
		while (idx < slen && s[idx] != '2') idx++;
		if (idx == slen) continue;
		while (idx < slen && s[idx] != '0') idx++;
		if (idx == slen) continue;
		while (idx < slen && s[idx] != '2') idx++;
		if (idx == slen) continue;
		while (idx < slen && s[idx] != '3') idx++;
		if (idx == slen) continue;

		ans++;
	}

	cout << ans;
}
728x90

+ Recent posts