728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17687
내가 직접 풀었다!
근데 내가 만든 코드보다 다른 사람코드가 더 효율적인듯하다😂
내가 푼 코드 :
def solution(n, t, m, p):
answer = [0]
ans = ''
# 숫자 구하기
for i in range(1,(m*t)+1) :
tmp_list = []
while i :
tmp = (i%n)
if tmp >=10 :
# 10보다 커지면 ABCDE
tmp_list.append(chr(tmp+55))
else :
tmp_list.append(tmp)
i = i//n
answer.extend(tmp_list[::-1])
for i in range(p-1,m*t,m) :
ans += str(answer[i])
if len(ans) == t : return ans
일단 최대 m*t만큼은 숫자를 부를테니까
n진수로 바꾸어 answer에 넣어준다.
이 친구들이 0부터 시작하기 때문에 answer에는 0을 하나 넣어두고 시작한다.
n진수로 다 바뀌어지면 m명이 있을 때 p순서인 튜브가 말하는 것을 출력해야하므로
ans에는 for을 이용해서 p-1부터 m을 간격으로 증가시킨 인덱스를 answer에서 추출해서 string으로 바꾸어 넣는다.
만약 ans의 길이가 t가 되면 ans를 반환하고 문제는 끝난다.
다른 사람 코드 :
def change(num, n):
numbers = '0123456789ABCDEF'
r = ''
if num == 0:
return '0'
while num > 0:
r = numbers[num % n] + r
num = num // n
return r
def solution(n, t, m, p):
tmp = ''
answer = ''
for i in range(t*m):
tmp += change(i, n)
for i in range(t):
answer += tmp[p-1+m*i]
return answer
change함수를 통해서 진수로 변환새서 tmp에 붙여넣어준다.
내가 푼 풀이와 비슷하긴 하다
근데 이 풀이가 더 깔끔하고 이해하기 쉽다.
참고 블로그 :
반응형
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]점 찍기_구현 (0) | 2022.12.05 |
---|---|
[Python/프로그래머스]파일명 정렬_구현 (0) | 2022.10.20 |
[Python/프로그래머스]압축_구현 (0) | 2022.10.20 |
[Python/프로그래머스]방금그곡_구현 (0) | 2022.10.19 |
[Python/프로그래머스]후보키_조합 (0) | 2022.10.19 |