문제:
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력:
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력:
첫째 줄에 새로운 수의 자릿수를 출력한다.
접근 방법
- 입력된 자릿수를 계산한다.
- 자릿수 별로 갯수를 배열로 만든다.
- 자릿수 - 1 까지 갯수를 더하고 현재 자릿수가 몇개 존재하는지 계산한다.
코드
접기/펼치기
import java.util.Scanner;
public class 수_이어_쓰기_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
int sToInt = Integer.parseInt(s);
int digits = s.length();
int numberOfDigits[] = new int[10];
for (int i = 1, j = 9; i < 10; i++) {
numberOfDigits[i] = j * i;
j *= 10;
}
int res = 0;
int ratio = (int) Math.pow(10, digits - 1);
for (int i = 1; i < digits; i++) {
res += numberOfDigits[i];
}
int completeNumbers = sToInt - ratio + 1;
res += completeNumbers * digits;
System.out.println(res);
}
}
수학적인 요소가 많아서 암산을해서 풀다보니 실수들이 발생했다. 우선 자릿수를 가지고 배열을 만드는데 기준을 정하는 부분과 모듈러 연산을 했을때 1의 자리에서는 모듈러 연산을 하면 값이 1로만 나오는 부분을 보고 빼기로 변경하였다.
'개인 공부 > 백준' 카테고리의 다른 글
14500번 테트로미노 (0) | 2024.08.18 |
---|---|
18290번 NM과 K (1) (0) | 2024.08.17 |
6588번 골드바흐의 추측 (0) | 2024.08.15 |
17425번 약수의 합 (0) | 2024.08.14 |
17427번 약수의 합 2 (1) | 2024.08.13 |