문제
k번째 Champernowne 단어는 첫 k개의 양의 정수를 차례대로 나열한 것이다.
양의 정수 n이 주어졌을 때, 이것이 Champernowne인지 판별하고 맞으면 몇 번째 Champernowne 단어인지 구하고,
아니라면 -1을 출력하라.
풀이
k=1부터 시작하여 n의 길이가 k의 길이보다 작아지는 경우까지 아래의 과정을 반복한다.
k가 n의 맨 앞에 있는지 startswith()로 판별하고, 맞다면 k의 자릿수만큼 n의 맨 앞 자리에 해당하는 부분을 제거한다.
k에 1을 더해주고 계속 반복한다.
맨 앞에 없다면 이 수는 Champernowne이 아니다.
while문이 종료될 때까지 return 값이 없었다면 이 수는 Champernowne이다.
이 상황에서 k 값은 원하는 값에 1이 더해진 값이므로 k-1을 return한다.
코드
def Champernowne(n):
k=1
while len(n) >= len(str(k)):
str_k=str(k)
if n.startswith(str_k):
len_k=len(str_k)
n=n[len_k:]
k+=1
else:
return -1
return k-1
n=input()
print(Champernowne(n))
'BOJ > Python' 카테고리의 다른 글
[BOJ/백준] 30585 - Поп-ит (Python) (1) | 2024.11.01 |
---|---|
[BOJ/백준] 32604 - Jumbled Scoreboards (Python) (1) | 2024.10.31 |
[BOJ/백준] 31282 - ЛОВНО КУЧЕ (Python) (0) | 2024.10.31 |
[BOJ/백준] 29823 - Pakirobot Manhattanis (Python) (0) | 2024.10.31 |
[BOJ/백준] 30658 - Os últimos serão os primeiros (Python) (1) | 2024.10.31 |