반응형
문제는 위와 같이 간단하다.
단순히 연속된 수를 옆으로 쭉 나열하면서 N까지 이어썼을 때의 자릿수, 즉 문자열의 길이를 구하면 된다.
간단히 증가하는 자릿수의 규칙을 찾아보자
- 한 자리 수(1 ~ 9)
123456789 -> 9자리
- 두 자리 수(10 ~ 99)
101112...979899 -> 180자리
.
.
.
보다시피 (각 자리의 길이) * (각 자리 숫자의 개수) 가 해당 자리수까지 전부 더했을 때 증가되는 문자열의 길이임을 알 수 있다.
만약 입력으로 받은 N이 네 자리 숫자라면 3자리 숫자까지는 전부 더해지므로 위의 공식대로 증가시키고 입력받은 숫자의 길이인
4자리수 부터는 따로 계산해주면 쉽게 답을 구할 수 있을 것이다.
아래는 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <iostream> #include <string> #include <cmath> using namespace std; int main() { string N; cin >> N; int len = int(N.size()); if(len == 1) { cout << N << endl; return 0; } long answer = 0; for(int i = 1; i< len; i++) { answer += i*(9*pow(10, i-1)); } answer += len*(stoi(N)-pow(10, len-1)+1); cout << answer << endl; } //해결 | cs |
개선할 점이나 비판 지적은 언제든지 환영입니다.
반응형
'Algorithm > 문제 풀이' 카테고리의 다른 글
BOJ 백준 6236 용돈관리 풀이(C++) (0) | 2019.02.11 |
---|---|
BOJ백준 9019 DSLR 풀이(C++) (1) | 2019.02.08 |
BOJ백준 2293 동전1 풀이(Python) (0) | 2019.02.08 |
BOJ백준 1890 점프 풀이(Python) (0) | 2019.02.06 |
BOJ백준 1339 단어수학 풀이(Python) (0) | 2019.02.06 |