문제
알고리즘
- 반복문을 통해 자릿수에 맞게 수를 빼준다.
- 현재 수에는 자릿수에 맞게 뺀 수의 수를 더한다.
- 자릿수를 이동하면서 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
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2294번(파이썬): 동전 2 (0) | 2022.02.01 |
---|---|
[baekjoon] 백준 2011번(파이썬): 암호코드 (0) | 2022.01.31 |
[baekjoon] 백준 1629번(파이썬): 곱셈 (0) | 2022.01.29 |
[baekjoon] 백준 1495번(파이썬): 기타리스트 (0) | 2022.01.28 |
[baekjoon] 백준 1342번(파이썬): 행운의 문자열 (0) | 2022.01.27 |