2024년 4월 1일 알고리즘 문제풀이
문제
난이도
Lv.2
코드
1차
실패
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def find_limit(a,b):
# a를 b진법으로 바꿀 때 자릿수를 반환
idx = 0
while b**idx < a:
idx += 1
return idx
def change(k,m):
# k를 m진법으로 변환하는 함수
max_val = find_limit(k,m)
arr = [0 for _ in range(max_val)]
for i in range(max_val):
arr[i] = k//(m**(max_val-(i+1)))
k -= arr[i]*(m**(max_val-(i+1)))
return str(''.join(arr))
def solution(n, t, m, p):
answer = ''
arr = []
numbers = [str(i) for i in range(10)] + ['A', 'B', 'C', 'D', 'E', 'F']
n_numbers = numbers[:n]
for i in range(m*t):
num = change(i,n)
print(num)
return answer
m명이 t개를 불러야 하므로 m*t까지 숫자를 구한다음, 모두 n진법으로 바꾸려 했다. 문자열로 조각내 배열에 담은다음 찾으면 될 듯 했다. 진법 변환을 못하겠다..
2차
실패
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def change(n, base):
numbers = [str(i) for i in range(10)] + ['A', 'B', 'C', 'D', 'E', 'F']
q, r = divmod(n, base)
if q == 0:
return numbers[r]
else:
return change(q, base) + numbers[r]
def solution(n, t, m, p):
answer = ''
arr = []
for i in range(m*t):
arr += list(change(i,n))
for j in range(t):
answer += arr[t]
return answer
튜브가 불러야 한 순서의 글자들을 찾지 못하고 있었다. 아무래도 index는 0부터 시작하지만 순서는 1부터 시작하기 때문인듯 하다.
3차
100/100
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def change(n, base):
numbers = [str(i) for i in range(10)] + ['A', 'B', 'C', 'D', 'E', 'F']
q, r = divmod(n, base)
if q == 0:
return numbers[r]
else:
return change(q, base) + numbers[r]
def solution(n, t, m, p):
answer = ''
arr = ['x']
for i in range(m*t):
arr += list(change(i,n))
for j in range(t):
answer += arr[p+j*m]
return answer
index와 순서를 통일하기 위해 의미없는 문자로 0번 인덱스를 채워줬다.