※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 33690번 문제인 포린드롬이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/33690
먼저 한 자리 수(0 포함)는 주어진 조건을 항상 만족함을 관찰하자.
주어지는 조건을 만족하는 한 자리 이상의 수는 "두 자리 이상이면서 마지막 자리를 지운 수와 원래 수가 모두 팰린드롬인 수"로 해석할 수 있다. 한편, 두 수에서 서로 대응되는 위치에 있는 각 숫자의 쌍을 연결하면 이 조건을 만족하는 수를 구성하는 숫자가 모두 동일해야 함을 알 수 있다.
이러한 수는 몇 없으므로, \(N\) 이하의 수 중 이러한 수를 모두 생성하는 것으로 주어진 수 이하인지 확인하는 것으로 문제를 해결할 수 있다. 이는 111...1 꼴의 수에 1 이상 9 이하의 정수를 곱하는 것으로 모두 얻을 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N, ans = 1;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N;
for (int i = 1; i < 1000000000; i = i * 10 + 1) {
for (int k = 1; k < 10; k++) {
if (i * k <= N) ans++;
}
}
cout << ans;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 29343 // C++] Шифровка (0) | 2025.04.02 |
---|---|
[BOJ 33689 // C++] CPDU (0) | 2025.04.01 |
[BOJ 21275 // C++] 폰 호석만 (0) | 2025.03.28 |
[BOJ 33574 // C++] 끊임없는 정렬과 창조함으로 (0) | 2025.03.27 |
[BOJ 29703 // C++] 펭귄의 하루 (0) | 2025.03.26 |