Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 7569번
- 구현
- 209번
- C++
- 11053번
- 백준
- 트리 구현
- 1029번
- 그리디
- 배열
- 3086번
- 2565번
- 2293번
- 2504번
- LIS
- 최소힙
- 1918번
- 1874번
- 투포인터
- 1004번
- 1931번
- 자료구조
- 1120번
- 1748번
- 수 이어쓰기 1
- 2503번
- 1759번
- LeetCode
- 릿코드
- 스택
Archives
- Today
- Total
Hello World!
[BOJ] 1748번: 수 이어 쓰기 1 본문
문제 링크: 백준/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