https://programmers.co.kr/learn/courses/30/lessons/17687
def basechange(i,n):
nbase = ''
while i:
if i%n > 9:
nbase += chr(55+(i%n))
else:
nbase += str(i%n)
i //=n
return nbase[::-1]
def solution(n, t, m, p):
answer = ''
game = '0'
number = 1
while len(answer) != t:
answer = ''
game += basechange(number,n)
number += 1
for i in game[p-1::m]:
answer += i
answer = answer[:t]
return answer
어려운데 재밌던 문제
구현하고자 했던 코드는
0부터 x까지 각 숫자를 n진법으로 나타내어
각 자릿수를 붙여서 문자열을 만들고
문자열을 m간격으로 잘라서
잘라낸 문자열의 p-1번째 인덱스를 t개 뽑아내어 리턴.
(필자는 x를 구하는 법을 모르겠음)
def solution(n, t, m, p):
game = '0' # 0 부터 x까지 각 숫자를 n진법으로 나타내어 붙여 저장할 문자열
for i in range(1,100000):
# 0부터 시작하면 오류가 발생해서 1부터 시작
# 위에서 서술했듯 x를 몰라서 십만정도 넣으니깐 몇몇 테스트케이스는 풀렸다.
nbase = ''
while i:
if i%n > 9:
nbase += chr(55+(i%n))
# 11진법 이상에서 10 이상의 수를 나타낼때 알파벳을 이용한다.
# 아스키코드에서 65부터 'A'인점을 이용했다.
else:
nbase += str(i%n)
i //=n
game += nbase[::-1]
arr = []
while game:
arr.append(game[:m])
game = game[m:]
answer = ''
for i in arr:
answer += i[p-1]
return answer[:t]
x를 구할 수 없으니
while문으로 0부터 x까지 1씩 증가시키면 될 것 같다고 생각해서 다시 코드를 짰다.
def basechange(i,n): # 진법 변환하는 부분을 따로 함수로 꺼냈다.
nbase = ''
while i:
if i%n > 9:
nbase += chr(55+(i%n))
else:
nbase += str(i%n)
i //=n
return nbase[::-1]
def solution(n, t, m, p):
answer = ''
game = '0'
number = 1
while len(answer) != t:
answer = ''
game += basechange(number,n)
number += 1
arr = []
tmp = game[:]
while tmp:
arr.append(tmp[:m])
tmp = tmp[m:]
for k in arr:
# m개 간격으로 잘라낸 문자열에서 p-1번째 인덱스가 존재하지 않는 경우가 있어서 인덱스 에러가 발생했다.
# 인덱스 에러를 피하기위해서 try-except문을 이용했다.
try:
answer += k[p-1]
except:
pass
answer = answer[:t]
return answer
정답에 가까워졌지만
위 결과처럼 14,15,16 테케에서 시간초과가 발생한다.
문자열을 m개 간격으로 잘라내어 arr배열에 저장하고 arr배열를 돌면서 p-1번째 인덱스를 꺼내서 저장하는 부분에서
시간초과가 발생했을 것 같아서 수정했다.
def basechange(i,n):
nbase = ''
while i:
if i%n > 9:
nbase += chr(55+(i%n))
else:
nbase += str(i%n)
i //=n
return nbase[::-1]
def solution(n, t, m, p):
answer = ''
game = '0'
number = 1
while len(answer) != t:
answer = ''
game += basechange(number,n)
number += 1
for i in game[p-1::m]:
answer += i
answer = answer[:t]
return answer