멋진 쌍
https://www.acmicpc.net/problem/12924
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 2 초 | 512 MB | 238 | 88 | 76 | 38.191% |
문제
두 자연수 (n, m)이 멋진 쌍일 조건은 다음과 같다.
- n의 뒤에서 몇 자리를 떼서, 앞에 그대로 붙이면 m을 얻을 수 있다.
예를 들어, 12345의 뒤에서 345를 떼서 앞에 붙이면 34512가 되므로, (12345, 34512)는 멋진 쌍이다.
같은 개수의 자릿수를 갖는 두 자연수 A와 B가 주어질 때, A ≤ x < y ≤ B 인 멋진 쌍 (x, y)의 개수를 출력하세요.
입력
첫 번째 줄에 두 자연수 A, B가 주어진다. A ≤ B ≤ 2,000,000, A와 B의 자릿수 개수는 같다.
출력
멋진 쌍의 개수를 자연수 하나로 출력한다.
예제 입력 1
1 9
예제 출력 1
0
예제 입력 2
10 40
예제 출력 2
3
예제 입력 3
100 500
예제 출력 3
156
알고리즘 분류
통과된 코드
중복을 제거하지 않으면 오답으로 처리됩니다.
#include <iostream>
#include <string>
#include <cmath>
#include <set>
using namespace std;
set<pair<int, int>> _ResSet;
int _A, _B, _Res;
int FindingDigit(int _number)
{
int dig = 0;
while (_number) {
_number /= 10;
dig++;
}
return dig;
}
int main()
{
cin >> _A >> _B;
for (int i = _A; i <= _B; i++) {
int dig = FindingDigit(i);
_ResSet.clear();
for (int j = 1; j <= dig - 1; j++) {
int number = i;
int _t = pow(10, j);
int remainder = number % _t;
int frontpart = number / _t;
int frontpartDig = FindingDigit(frontpart);
_t = pow(10, frontpartDig);
int res = frontpart + (remainder * _t);
if (dig != FindingDigit(res))
continue;
if (res > _B || res < _A || res <= number)
continue;
_ResSet.insert({ number, res });
}
_Res += _ResSet.size();
}
cout << _Res;
return 0;
}


![백준 2211번 (네트워크 복구, C++, Dijkstra) / 추가 반례 [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og-1.png)
![백준 26005번 (나뭇잎 학회, C++) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/2022/10/boj-og-1-2048x1070-1-1024x535.png)
![백준 1463번 (1로 만들기, C++, DP) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og.png)