👉 사용 언어 : PYTHON3
[3차] n진수 게임
✅ Solution
def solution(n, t, m, p):
base = ''
ans = ''
num = 0
while len(base) < (m*(t-1)+p):
base += ''.join(list(map(str, n_base(num, n))))
num += 1
for i in range(len(base)):
if i == (p-1) or (i - (p-1)) % m == 0 and len(ans) < t:
ans += base[i]
return ans
def n_base(num, n):
res = []
int_alpha = {10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}
while num > 0:
remain = num % n
res.append(remain if remain < 10 else int_alpha[remain])
num = num // n
res.reverse()
return res if len(res) != 0 else [0]
👉 문제 설명 및 제한 사항
- 게임 규칙
- 숫자를 0부터 시작해서 차례대로 말한다. (0, 1, 2, ..., 9)
- 10이상 숫자 : 한 자리씩 끊어서 말한다. (10 > 1, 0)
- 이진수로 적용하면❓ 0, 1, 1, 0,1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, ...
- 난이도를 높이기 위해 2진법 ~ 16진법 중 하나로 게임 진행
- 매개변수 : 진법 n, 미리 구할 숫자 개수 t, 게임 참가 인원 m, 튜브 순서 p
- 2 <= n <= 16
- 0 < t <= 1000
- 2 <= m <= 100
- 1 <= p <= m
- 리턴값 : 튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열
- 10 ~ 15 : 대문자 A ~ F 로 표현
👉 아이디어

- n 진수로 변환한 값을 문자 리스트로 반환하는 함수 정의 _ n_base
- n으로 나눈 나머지를 차례대로 추가하여 마지막에 리스트를 뒤집어서(.reverse()) 반환한다.
- 나머지가 두 자릿수인 경우(10~15)에는 대문자로 치환하여 저장한다.
- 전달받은 숫자가 0인 경우(= 나머지를 저장한 배열의 길이가 0인 경우) [0]을 반환하도록 조건문을 추가한다.
- 튜브가 t개를 말할 수 있을 때까지 반복문을 돌려 0부터 n진법으로 표현한 값을 문자열 base에 추가한다.
- 튜브가 t개 말하려면❓ 최소 (m*(t-1)+p)개의 숫자가 필요하다.
- 그 중 튜브가 말해야 하는 숫자는 p번째 or m의 배수 번째 숫자이다.
- 인덱스는 0부터 시작하므로 조건문에서 p대신 p-1로 계산한다.
- 정답 문자열에 추가한 숫자 개수가 t개가 되면 반복문을 종료하도록 조건을 추가한다.
- 애초에 base 문자열에 (m*(t-1)+p)개 이상의 숫자가 들어있을 수 있기 때문에❗
- 정답 문자열 ans를 반환한다.
✅ 다른 사람 풀이 참고
def solution(n, t, m, p):
data = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
numbers = "0"
for number in range(1, t*m):
temp = []
while number > 0:
temp.append(data[number%n])
number //= n
numbers += "".join(reversed(temp))
return numbers[p-1:t*m:m]
👉 깨달은 것 / 알게된 것
- 배열을 역순 정렬할 때, 문자열.reverse() 대신 문자열[::-1] 을 사용할 수 있다.
- [::-1] : 전체 문자열을, 뒤로 1개씩 가면서 찍기
- 딕셔너리를 사용하지 않고 아예 0~F까지 리스트 에 넣어 풀이할 수 있다.
- 애초에 문자열에 0을 넣고 시작한다.
- [p-1 : t*m : m] : 인덱스가 p-1인 문자부터 찍고, m개씩 이동해서 찍기, (t*m)-1 인덱스까지 도달
'알고리즘풀이 > 프로그래머스' 카테고리의 다른 글
| [2/22] 기출문제 풀이 (0) | 2024.02.20 |
|---|---|
| [PCCE 기출문제 풀이] 10번 / 데이터 분석 (0) | 2024.02.18 |
| 하노이의 탑 (2) | 2024.02.11 |
| [2/10] 기출문제 풀이 (0) | 2024.02.08 |
| [2/5] Kakao Internship 기출문제 풀이 (0) | 2024.02.03 |