Algorithm & SQL/BOJ
[백준 1748번 / Java] BOJ 1748 : 수 이어 쓰기 1
김룹
2024. 2. 25. 15:00
1748번: 수 이어 쓰기 1
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
www.acmicpc.net
문제 보자마자 시간 제한은 안읽어보고 바로 푸느라고 메모리 초과가 떴다... ㅎ
메모리 초과 보고나서 제한 시간을 보니 이렇게 풀어서 맞았다면 브론즈 문제였겠지 싶긴 했다 ;
일단 정답 코드 👇
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 0; // 총 자릿 수
int upgrade = 1; // 현재 숫자의 자릿 수
int num = 10; // 현재 숫자가 몇자리 숫자인지 확인하기 위한 변수
for(int i = 1; i <= N; i++) {
if(i % num == 0) {
upgrade++; // 현재 숫자의 자릿 수를 1 늘려준다.
num *= 10; // 10 -> 100 -> 1000 ...
}
count += upgrade; // 현재 자릿 수를 더해준다
}
System.out.println(count);
}
}
1 ~ 9 까지는 1자리
10 ~ 99 까지 2자리
100 ~ 999 까지 3자리 ....
변경되는 기준점이 10, 100, 1000 ... 의 패턴이 있는 것을 볼 수 있다.
그래서 해당 기준점을 num이라는 변수를 선언해서, 나머지가 0일 경우 그 다음 기준점으로 변경(num *= 10) 해주고 자릿 수도 1씩 증가시켜주었다.
느낀 점 및 정리 ✍️
1. 문제를 꼼꼼하게 읽자 (시간 제한 등..)