오답노트
[브루트포스] BOJ 1748 수 이어 쓰기 1 본문
https://www.acmicpc.net/problem/1748
- 문제 파악
임의의 숫자 N이 주어이고 그 수를 1부터 N까지 이어 붙혀 새로운 수를 만들 수 있다. 이 새로운 수의 자리수를 구하여라
- 정답
1. N 의 자리수를 nSize라고 할때, nSize -1 자리수까지는 1부터 10^nSize -2 이므로 모두 더한다.
2. 나머지 10^nSzie-1 부터 N까지는 nSize 자리수 가 N - 10^nSize -1 개 만큼 있으므로
nSize * (N - 10^nSize - 1)을 1번과 더한다.
#include "bits/stdc++.h"
using namespace std;
unsigned long long ans;
int main()
{
string str;
unsigned long long n;
cin >> str;
n = stol(str);
int nSize = str.length();
for (int i = 1; i < nSize; i++)
{
unsigned long long tmp = pow(10, i) - pow(10, i-1);
ans += (tmp * i);
}
if(nSize > 1)
ans += (nSize * (n + 1 - pow(10, nSize-1)));
else
ans += n;
cout << ans;
}
'C,C++ > 코딩테스트' 카테고리의 다른 글
[재귀] BOJ 2529 부등호 (0) | 2022.05.07 |
---|---|
[재귀] BOJ 14889 스타트와 링크 - 오답노트 (0) | 2022.05.04 |
[브루트포스] BOJ 1476 날짜 계산 (0) | 2022.05.03 |
[브루트포스] BOJ 3085 사탕게임 (0) | 2022.05.02 |
[브루트포스] BOJ 2309 일곱 난쟁이 - 오답노트 (0) | 2022.05.02 |