반응형
**문제 풀이 방법
- 입력된 숫자의 각 자리수를 더해줘야 하므로, modular 연산(나머지를 사용하는)을 사용한다. - 0~9 자리수 배열을 만든 후, 해당 자리의 값이 몇 번 등장하는지 count 한다. * Java 코드로 친절한 문제풀이를 해주신 은서파님께 감사드립니다. https://goodteacher.tistory.com/403 https://tv.naver.com/v/22678458 |
*** 코드
#include <stdio.h>
using namespace std;
typedef long long ll;
ll arr[10];
void parse(ll x, ll delta) { // 숫자 x의 각 자리수에 delta 만큼 count 증가
while (x > 0) {
arr[x % 10] += delta;
x /= 10;
}
}
int main() {
//freopen("input.txt", "r", stdin);
int TC;
scanf("%d", &TC);
for (int tc = 1; tc <= TC; tc++) {
// 배열 초기화
for (int i = 1; i < 10; i++) {
arr[i] = 0;
}
ll A, B;
scanf("%lld %lld", &A, &B);
ll delta = 1;
while (A <= B) {
for (; ((A % 10 != 0) && (A <= B)); A++) {
parse(A, delta);
}
for (; ((B % 10 != 9) && (A <= B)); B--) {
parse(B, delta);
}
if (A > B) break;
A /= 10;
B /= 10;
ll rows = B - A + 1;
for (int i = 0; i < 10; i++) {
arr[i] += rows * delta;
}
delta *= 10;
}
// 결과구하기
ll sum = 0;
for (int i = 1; i < 10; i++) {
sum += i * arr[i];
}
printf("#%d %lld\n", tc, sum);
}
return 0;
}
**** 주의할 점
- 입력되는 A, B의 값이 10^15보다 작은 값이므로 A, B의 자료형을 int 보다 큰 범위를 사용한다. |
<Reference>
- https://swexpertacademy.com/main/main.do
반응형
'Data science > 알고리즘 학습' 카테고리의 다른 글
백준 2042 : 구간 합 구하기 (C++) [Segment tree] (0) | 2022.04.01 |
---|---|
백준 1280 : 나무심기 (C++) [세그멘트 트리, 펜윅트리] (0) | 2022.03.31 |
SWEA 1232 : 사칙연산[D4] (C++) (0) | 2022.03.28 |
c++ 자료형 정리 (0) | 2022.02.28 |
SWEA 1251 : 하나로[D4] (c++)_(priority_queue) (0) | 2022.02.23 |