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

 

이번에 볼 문제는 백준 16680번 문제인 안수빈수이다.
문제는 아래 링크를 확인하자.

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

 

16680번: 안수빈수

자릿수의 합이란 무엇인가? 이는 수를 10진수로 나타내었을 때, 각 자리 숫자들의 합을 의미한다. 예를 들어, 1093의 자릿수의 합은 1 + 0 + 9 + 3 = 13이다. 우리는 자릿수의 합이 짝수인 양의 정수를

www.acmicpc.net

어떤 수 N이 주어질 때, "N에 (N의 자릿수보다 많은 개수)의 0을 뒤에 붙인 수"에서 N을 뺀 수들을 비교하면 (X)99...99(Y)꼴의 N의 배수들이 나오게 될 것이라는 점을 관찰하자.

 

가운데의 9의 개수가 계속 바뀌므로 N에 붙이는 0의 개수를 하나씩 늘려나가면 위 과정을 통해 구해지는 수는 수빈수와 안수빈수가 번갈아 등장하게 된다. 따라서 N에 9, 99, 999, 9999등을 곱해나가다 보면 적은 시도로 N의 배수인 안수빈수를 항상 찾아낼 수 있다.

 

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

#include <iostream>
using namespace std;
typedef long long ll;

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

	int T; cin >> T;
	while (T--) {
		ll x; cin >> x;
		ll exp = 10;
		while (true) {
			ll xx = x * (exp - 1);
			int digitsum = 0;
			while (xx) {
				digitsum += xx % 10;
				xx /= 10;
			}
			if (digitsum & 1) {
				cout << x * (exp - 1) << '\n';
				break;
			}
			else exp *= 10;
		}
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1415 // C++] 사탕  (0) 2022.03.14
[BOJ 2847 // C++] 게임을 만든 동준이  (0) 2022.03.13
[BOJ 2331 // C++] 반복수열  (0) 2022.03.11
[BOJ 24503 // C++] blobfearful  (0) 2022.03.10
[BOJ 24502 // C++] blobsad  (0) 2022.03.09

+ Recent posts