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. 문제를 꼼꼼하게 읽자 (시간 제한 등..)