CodingTest/Baekjoon

[baekjoon] 백준 1790번(파이썬): 수 이어 쓰기 2

JunJangE 2022. 1. 30. 11:47

문제

 

1790번: 수 이어 쓰기 2

첫째 줄에 N(1 ≤ N ≤ 100,000,000)과,  k(1 ≤ k ≤ 1,000,000,000)가 주어진다. N과 k 사이에는 공백이 하나 이상 있다.

www.acmicpc.net

알고리즘

- 반복문을 통해 자릿수에 맞게 수를 빼준다.

- 현재 수에는 자릿수에 맞게 뺀 수의 수를 더한다.

- 자릿수를 이동하면서 1의 자리는 9개, 10의 자리는 18개.. 씩 개수를 빼준다.

- 자릿수에 맞게 수를 빼줬다면 남은 자릿수의 수를 현재 수에 더해준다.

- 현재 수가 n보다 크다면 -1을 출력하고 그게 아니라면 문자열로 변환 후 남은 자릿수의 값을 출력한다.

코드

import sys

n, k = map(int, sys.stdin.readline().split())
ans = 0
num = 1
nine = 9


# 반복문을 통해 자리수에 맞게 수를 빼준다.
while k > num * nine:
    k -= (num * nine) # 1의 자리는 9개 10의 자리는 18개..
    ans += nine # 현재 수

    # 자리수 이동
    num += 1
    nine = nine * 10

# 남은 자리수의 수를 현재 수에 더해준다.
ans = (ans+1) + (k-1) // num

if ans > n:
    print(-1)
else:
    print(str(ans)[(k-1) % num])

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com