백준 1748 / 수 이어 쓰기 1

dogit·2021년 8월 5일
0

백준문제

목록 보기
45/67

문제

풀이

설명

1부터 N까지 수를 이어서 쓰면 새로운 하나의 수를 얻게 된다.
이때, 생기는 새로운 수의 자리수를 구하는 문제이다.

입력하는 N값(1<= N <= 100,000,000)이 너무 크기 때문에, 실제로 수를 만드는 것은 너무 시간이 오래 걸린다.
총 N개의 수를 하나의 문자열로 만들어야 한다.
시간 복잡도 : O(n) X 10

ex)
n = 120
1-9 : 1 x 9
10-99 : 2 X (99-10+1) X 2
100-120 : 3 X 9 (120-100+1) X 3

코드

import java.util.Scanner;

public class Num1748 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		long ans = 0;
		
		for (int start =1, len = 1; start <= n; start *= 10, len++) {
			int end = start*10-1;
			if (end >n) {
				end = n;
			}
			ans += (long)(end =- start + 1) * len;
		}
		System.out.println(ans);
	}
}

코드설명

참고 :
출처 : https://www.acmicpc.net/problem/1748

profile
느리더라도 꾸준하게

0개의 댓글