티스토리 뷰
https://www.acmicpc.net/problem/1790
1790번: 수 이어 쓰기 2
첫째 줄에 N(1 ≤ N ≤ 100,000,000)과, k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.
www.acmicpc.net
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수에서, 앞에서 k번째 자리 숫자가 어떤 숫자인지 구하는 프로그램을 작성하시오.
코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()), k = Integer.parseInt(st.nextToken());
long count = 9, length = 1, target = 0;
while (k > count * length) {
k -= length * count;
target += count;
length++;
count *= 10;
}
target = target + 1 + (k - 1) / length;
if (target > n) bw.write(String.valueOf(-1));
else bw.write(String.valueOf(target).charAt((int) ((k - 1) % length)));
bw.flush();
}
}
풀이
자릿수가 1일 때는 숫자가 9개고 문자열 길이가 9이다. 자릿수가 2가 되면 숫자는 90 개고 문자열 길이 90 * 2 가 된다. 또한 3일 때는 900 과 900 * 3이다. 이를 활용하면서 원하는 자릿 수의 숫자 중에서도 몇번째 숫자의 몇자릿수를 구하면 되는지 연산하여 출력한다.
'학습 내용 > 백준 문제풀이' 카테고리의 다른 글
백준 1135 자바 - 뉴스 전하기 (0) | 2023.03.28 |
---|---|
백준 11000 자바 - 강의실 배정 (0) | 2023.03.27 |
백준 1377 자바 - 버블 소트 (0) | 2023.03.07 |
백준 11625 자바 - 카드 (0) | 2023.03.07 |
백준 10825 자바 - 국영수 (0) | 2023.03.07 |