Hello World!

[BOJ] 1748번: 수 이어 쓰기 1 본문

알고리즘/baekjoon

[BOJ] 1748번: 수 이어 쓰기 1

qkrgusdk 2020. 5. 9. 23:06

문제 링크: 백준/BOJ https://www.acmicpc.net/problem/1748

 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1≤N≤100,000,000)이 주어진다.

www.acmicpc.net

 

입력받은 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