※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 12347번 문제인 한수 2이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/12347
등차수열의 공차가 0이 아닌 한수는 길어봐야 10자리(9876543210)이고, 그 외의 한수는 한 가지 숫자가 반복되는 형태의 수밖에 없음을 관찰하자. 이 관찰을 이용하면 주어진 범위 내의 한수는 매우 적음을 발견할 수 있다.
따라서,
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long long ll;
typedef __int128 lll;
ll N, ans;
void func(int x, int y) {
int d = y - x;
lll val = x * 10 + y;
while (val <= N) {
ans++;
y += d;
if (y < 0 || y > 9) break;
val = val * 10 + y;
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i < 10; i++) {
if (i <= N) ans++;
for (int j = 0; j < 10; j++) {
func(i, j);
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 20913 // C++] Mixtape Management (0) | 2024.08.13 |
---|---|
[BOJ 27503 // C++] 요가 수업 (0) | 2024.08.12 |
[BOJ 19666 // C++] Cryptography (0) | 2024.08.10 |
[BOJ 13346 // C+] Hamming Ellipses (0) | 2024.08.09 |
[BOJ 2115 // C++] 갤러리 (0) | 2024.08.08 |