문제
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
'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 |