0 : arr += n_arr[temp % n] temp = temp // n answer += arr[::-1] return answer[p-1::m][:t]"> 0 : arr += n_arr[temp % n] temp = temp // n answer += arr[::-1] return answer[p-1::m][:t]"> 0 : arr += n_arr[temp % n] temp = temp // n answer += arr[::-1] return answer[p-1::m][:t]">
def solution(n, t, m, p):
n_arr = "0123456789ABCDEF"
answer = '0'
for i in range(t * m) :
arr = ""
temp = i
while temp > 0 :
arr += n_arr[temp % n]
temp = temp // n
answer += arr[::-1]
return answer[p-1::m][:t]
문제정리
여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데,1. 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.
이때 10이상일때 10진수가 아닌 2~16진수로 게임을 진행하기도하는데
말해야하는 숫자를 스마트폰에 미리 출력해주는 프로그램을 만들려고한다.
풀이과정
이번에도 문제를 잘 못 이해하고 풀었다. 문제를 잘못푸는 경우를 좀 줄여야겠다.
이번에는 한자리씩 끊어서말하는 것을 빼먹어서 문제가 되었다(분명히 문제를 이해했는데 잠결에 봤나보다)그래서 잠시동안 02468ACE11111111에서 1111111이 왜나오지? 이생각을 오랫동안했다.
위에 같이 이해해서 조건을 걸어주는 시간이 오래걸렸다. 토글을 이용해서 해당 유저가 말한 위치에 올경우 answer에 추가해줌으로 풀었는데 너무어려워서 다른 풀이를 보니 쉽게 그것이 아니였다.
처음부터 끝까지 모든 말해야하는 값을 구한 후 슬라이싱과 배열의 위치를 이용하여 주인공이 말해야하는 숫자를 뽑아내면 됬었다.
좀더 노력해서 많이 풀어봐야겠다. 응용이 부족한 것 같다. 문제를 잘못본것도 있겠지만 슬라이싱을 이용할 방법을 생각하지 못했다. 코드 스니펫을 만들어서 사용해봐야겠다.(잘 까먹음으로,,,)
풀이 후
다른 사람풀이를 보고풀었기 때문에 할말은 없지만 내가 본 풀이가 가장 깔끔하고 시간복잡도도 적은거같다라는 생각이 들었다.
그리고 이문제가 성공률 91%라는 것에 또 놀랐다. 나는 2시간동안푼거같은데,,, 좀더 노력해야겠다.