[백준] 1748(자바) 수 이어쓰기 1

2025. 6. 26. 16:19·코딩 테스트

문제 링크

https://www.acmicpc.net/problem/1748

 

문제:

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

 

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

 

입력:

첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.

 

출력:

ex) 15인경우 123456789101112131415 = 21자리가 되는 것이다.

 

 

문제 해결 방안:

처음에는 1부터 카운팅하면서 숫자를 더하는 방향을 모두가 생각하겠지만, 시간초과 기준이 0.5 이내 이므로 이 방법이 아닌 다른 방법을 생각하였다.

 

결국 만약 3자리 수이면 2자리 수 까지 모두 구하고 나머지 3자리 수를 카운팅 하는 방법을 생각했다.

예를들면 Input이 3자리 수 120이라 생각해 보자 

 

1자리 카운팅(1~9) = 9*(10^0(이전 자리)) * 1(자리) =9

2자리 카운팅(10~99)= 9*(10^1(이전 자리)) * 2(자리)= 90 * 2 = 180  (여기까지 이전 자리 수 카운팅)

 

결국 3자리라면 이전 자리(1~2)들의 공식은 9 * 10^(이전자리 수) * 현재 구하는 자리수로 도출할 수 있다

 

나머지 카운팅 (100~120) 21개  =  (입력숫자 - 10^이전 자리 수  + 1) * 현재 구하는 자리 수 = (120 - 10^2 +1) * 3(자리) = 63

 

결론적으로 252가 정답이 되는 것이다.  

 

 

코드:

위에 방식을 그대로 코드로 구현하면 다음과 같다.

import java.util.Scanner;

public class Main {

    public static int Counting(int num){
        int count=0;
        int length=String.valueOf(Math.abs(num)).length();//자리수

        //자리수가 1이면 즉시 리턴
        if(length==1){
            return num;
        }

        //3자리라면 이전 1자리 2자리 개수 모두 카운팅
        for(int i=0; i<length-1; i++){
            count+=9*Math.pow(10,i)*(i+1);
        }

        //3자리 수만 카운팅
        count += (num - Math.pow(10, length - 1) + 1) * length;

        //결과 리턴
        return count;

    }

    public static void main(String[] args) {
        int num;

        //수 입력
        Scanner sc = new Scanner(System.in);
        num = sc.nextInt();
        //결과 출력
        System.out.println(Counting(num));


    }
}

 

 

결론:

문제만 봤을땐 너무 쉬워 보였지만 해당 규칙을 도출하는 과정에서 시간이 좀 들었다.

 

자료들을 여러개 찾아 본 결과 구하는 방식들이 제 각각이며 이해가 되지 않는 코드들도 많았다.

 

다른 코드에 휘둘리지 않고, 자신과 맞는 방식으로 구현하는 것을 추천한다.

 

'코딩 테스트' 카테고리의 다른 글

[백준] 2583 영역 구하기 (JAVA)  (2) 2025.07.02
[백준] 2468 안전 영역 (JAVA)  (0) 2025.07.02
[백준] 1012 유기농 배추 (JAVA)  (3) 2025.07.01
[백준] 2178 미로탐색 (JAVA)  (3) 2025.06.30
[백준] 1260 DFS와 BFS  (3) 2025.06.27
'코딩 테스트' 카테고리의 다른 글
  • [백준] 2468 안전 영역 (JAVA)
  • [백준] 1012 유기농 배추 (JAVA)
  • [백준] 2178 미로탐색 (JAVA)
  • [백준] 1260 DFS와 BFS
0kingki_
0kingki_
자바 + 스프링 웹 개발
  • 0kingki_
    0kingki_
    0kingki_
  • 전체
    오늘
    어제
    • 분류 전체보기 (134)
      • 코딩 테스트 (54)
      • 자바 (21)
      • 스프링 (27)
      • 타임리프 (16)
      • 스프링 데이터 JPA (8)
      • 최적화 (2)
      • QueryDSL (4)
      • AWS (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    코딩테스트
    Java
    thymeleaf
    재귀
    백준
    다형성
    QueryDSL
    타임리프
    fetch join
    SOLID
    spring
    최적화
    JPA
    스프링 데이터 JPA
    LocalDateTime
    코딩 테스트
    스프링 컨테이너
    dfs
    객체지향
    SpringDataJpa
    예외처리
    쿼리dsl
    스프링
    쿼리
    예외 처리
    컬렉션
    불변객체
    mvc
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
0kingki_
[백준] 1748(자바) 수 이어쓰기 1
상단으로

티스토리툴바