Algorithm
[백준 Silver 3] 1748 수 이어 쓰기 1 - Java
Ray
2022. 1. 16. 21:52
문제링크 : https://www.acmicpc.net/problem/1748
1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
접근 과정 :
- 완전탐색으로 수를 N까지 탐색하면서, 그 자릿수를 모두 더해주었다.
- ++
- N까지 모든 수를 탐색하지 않아도, 수의 범위로 자릿수의 총합을 구할 수 있다.
- 1~9 / 10~99 / 100~999 / .... 등 N과 각 자릿수의 범위 관계로 탐색연산의 횟수를 줄일 수 있다.
소스 코드 및 결과 :
package BOJ;
/**
수 이어 쓰기 1
완전탐색
*/
import java.io.*;
public class BOJ1748 {
public static void main(String[] args) throws NumberFormatException, IOException {
new BOJ1748().solution();
}
private void solution() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int answer = 0;
int digit = 1;
int range = 10;
for (int i = 1; i <= N; i++) {
if (i % range == 0) {
digit++;
range *= 10;
}
answer += digit;
}
System.out.println(answer);
}
}
package BOJ;
/**
수 이어 쓰기 1
자릿 수 범위 계산
*/
import java.io.*;
public class BOJ1748_copy {
public static void main(String[] args) throws NumberFormatException, IOException {
new BOJ1748_copy().solution();
}
private void solution() throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int answer = 1;
int digit = 1;
int range = 10;
for (int i = 1; i <= N; i++) {
if (N >= range) {
answer += ((range - (range / 10)) * digit)+1;
i = range - 1;
digit++;
range *= 10;
} else {
answer += ((N - (range / 10)) * digit);
break;
}
}
System.out.println(answer);
}
}