728x90
[백준] 1748번 - 수 이어 쓰기 1 (!) (JAVA)
[접근 방법]
- 문제를 이해하자.
첫번째로 읽었을 때, 문제가 잘 이해 되지 않았다.
N = 5 인 경우를 예로 들었을 경우,
123454321... 과 같이 이전 자리수와 연결되어 있기만 한 수도 가능한 것 인가? 라고 생각했다.
그러나 N = 15를 예로 든다면,
1/2/3/4/5/6/7/8/9/10/11/12/13/14/15 (/는 이해를 위해..) 와 같이 1 ~ N 까지 수를 그대로 뒤에 이어 붙인 것이다.
- 어떻게 풀지 생각해보자.
N = 120인 경우,
1 ~ 9 까지는 +1을, (한자리수)
10 ~ 99 까지는 +2를, (두자리수)
100 ~ 120 까지는 +3을 하면 된다. (세자리수)
이렇게 구현하기 위해서는 1 ~ 100_000_000 까지 총 9자리 수에 대한 경우를 모두 고려해야 한다.
1 ~ 120을 모두 이어 붙였을 경우,
1 ~ 120의 수 중 1의 자리를 가지고 있는 수는 120개 (1 ~ 120)
십의 자리를 가지고 있는 수는 111개 (10 ~ 120)
백의 자리를 가지고 있는 수는 21개 (100 ~ 120)
그리하여 총 자리수는 252이다.
[JAVA 코드]
// 1748번 - 수 이어 쓰기 1
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
// 0. 입출력 선언 / 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
/*
1 ~ N 까지의 수
1의 자리수 + 10의 자리수 + 100의 자리수 + ...
*/
int len = 0; // 총 자리수
for(int i=1; i<=N; i*=10){
len += N - i + 1;
}
bw.write(len + "\n");
br.close();
bw.close();
}
}
[Rewind]
1. 어려웠던 점
- 접근 방법을 찾는 것이 어려웠다.
2. 알게된 점
-
3. 개선 방향
- 비슷한 문제를 여러개 풀어야 한다.
728x90
'백준 > 코드 플러스 (알고리즘 기초 - 2) (완)' 카테고리의 다른 글
[백준] 14500번 - 테크로미노 (★) (JAVA) (0) | 2023.02.12 |
---|---|
[백준] 6064번 - 카잉 달력 (!) (JAVA) (0) | 2023.02.12 |
[백준] 1476번 - 날짜 계산 (JAVA) (0) | 2023.02.09 |
[백준] 2309번 - 일곱 난쟁이 (!) (JAVA) (0) | 2023.02.09 |
[백준] 3085번 - 사탕 게임 (!) (JAVA) (0) | 2023.02.09 |