Notice
Recent Posts
Recent Comments
Link
Hello World!
[BOJ] 1748번: 수 이어 쓰기 1 본문
문제 링크: 백준/BOJ https://www.acmicpc.net/problem/1748
입력받은 N에 대해 자릿수를 계산한 뒤
해당 자릿수를 제외한 자릿수를 가지는 수의 개수를 arr배열에 미리 저장해둔 값을 이용해 계산해주었다.
그리고 해당 자릿수의 값들은 개수를 직접 계산해서 더해주었다.
예시로 N = 12인 경우를 간단히 살펴보자.
12는 두 자릿수이므로 len = 2이다.
한 자릿수의 수들(1~9)는 arr [1] 개이고 각 수는 한 자릿수이므로 총 9자리이다.
두 자릿수는 12 - 10 + 1 = 3개이고, 각 수는 두 자릿수이므로 총 3*2 = 6자리이다.
따라서 총 15자리임을 계산할 수 있다.
/*
20200308
1748번 - 수 이어 쓰기1
*/
#include <iostream>
#include <cmath>
using namespace std;
int arr[10] = { 0,9,90,900,9000,90000,900000,9000000,90000000,1 };
int calLen(int n) {
int cnt = 0;
while (n) {
cnt++;
n /= 10;
}
return cnt;
}
int main() {
cin.tie(NULL); ios_base::sync_with_stdio(false);
int n, len, ans = 0;
cin >> n;
len = calLen(n);
for (int i = 1; i <= len; ++i) {
if (i < len) {
ans += (arr[i] * i);
}
else
ans += ((n - pow(10, i - 1)+1)*i);
}
cout << ans;
}
'알고리즘 > baekjoon' 카테고리의 다른 글
[BOJ] 11053번: 가장 긴 증가하는 부분 수열 (0) | 2020.05.12 |
---|---|
[BOJ] 1759번: 암호 만들기 (0) | 2020.05.10 |
[BOJ] 2504번: 괄호의 값 (0) | 2020.05.09 |
[BOJ] 1874번: 스택 수열 (0) | 2020.05.07 |
[BOJ] 2503번: 숫자 야구 (0) | 2020.05.07 |
Comments