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

 

이번에 볼 문제는 백준 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

+ Recent posts