https://school.programmers.co.kr/learn/courses/30/lessons/17687
Solution
def toN(number, N):
s= ""
while True:
if number < 1 :
break
if number % N == 10:
s += 'A'
elif number % N == 11:
s += 'B'
elif number % N == 12:
s += 'C'
elif number % N == 13:
s += 'D'
elif number % N == 14:
s += 'E'
elif number % N == 15:
s += 'F'
else:
s += str(number % N)
number = number // N
return s[::-1]
def solution(n, t, m, p):
"""
0 1 1 0 1 1 1 0 0
"""
st = "0"
i=0
while True:
if len(st) >= 100000:
break
st += toN(i, n)
i+=1
answer = ""
i=0
while True:
if t <= len(answer):
return answer
if i % m == p-1:
answer+=st[i]
i+=1
진법 게임에서 참가자들이 숫자를 말하는 순서를 계산해야 한다. 게임에 사용되는 진법, 구해야 할 숫자 개수, 참가자 수, 튜브의 순서가 주어지며, 숫자를 출력해야 한다. 문제는 튜브가 말해야 하는 숫자를 찾는 것이다.
한 문제에서 N진법 변환을 두 번 하는듯한 문제였다. 엄청 어려운 느낌은 아니었지만 진법 구하는 문제에 대해 익숙하지 않았더라면 꽤 오래걸렸을것 같다.
Attempt (len(st) >= 16000)
def toN(number, N):
s= ""
while True:
if number < 1 :
break
if number % N == 10:
s += 'A'
elif number % N == 11:
s += 'B'
elif number % N == 12:
s += 'C'
elif number % N == 13:
s += 'D'
elif number % N == 14:
s += 'E'
elif number % N == 15:
s += 'F'
else:
s += str(number % N)
number = number // N
return s[::-1]
def solution(n, t, m, p):
"""
0 1 1 0 1 1 1 0 0
"""
st = "0"
i=0
while True:
if len(st) >= 16000:
break
st += toN(i, n)
i+=1
# print(st)
answer = ""
i=0
while True:
if t <= len(answer):
return answer
if i % m == p-1:
answer+=st[i]
# print("i", i, "m", m, "p", p)
i+=1
처음 t의 최대 길이와 p의 최대 길이를 대략 16000정도로 잡으면 맞겠다 싶었는데, 생각보다 런타임 에러가 많이났다. 넉넉잡아 10만 이상 for문을 돌리는 것으로 쉽게 해결했다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
코딩테스트 연습 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 (0) | 2023.07.11 |
---|---|
[heap 정렬에 관하여] 코딩테스트 연습 힙(Heap) 더 맵게 (0) | 2023.07.11 |
코딩테스트 연습 2018 KAKAO BLIND RECRUITMENT [3차] 압축 (0) | 2023.07.10 |
코딩테스트 연습 해시 전화번호 목록 (0) | 2023.07.09 |
코딩테스트 연습2018 KAKAO BLIND RECRUITMENT[1차] 뉴스 클러스터링 (0) | 2023.07.08 |