괄호변환
🤖문제 : 괄호변환 Lv2
😎풀이
def process2(w) :
lst = [0, 0]
for i, s in enumerate(w) :
if s == '(' :
lst[0] += 1
else :
lst[1] += 1
if lst[0] == lst[1] :
if i+1 == len(w) :
u, v = w, ""
else :
u, v = w[:i+1], w[i+1:]
return u, v
def process1(w) :
if len(w) == 0 :
return w, True
return w, False
def is_collect(u) :
k = 0
for s in u :
if s == '(' :
k += 1
else :
k -= 1
if k < 0 :
return False
return True
def get_collect_string(p) :
w, empty = process1(p)
if empty :
return answer + w
else :
u, v = process2(w)
if is_collect(u) :
return answer + u + get_collect_string(v)
else :
k = '(' + get_collect_string(v) + ')'
for j in u[1:-1] :
if j == '(' :
k += ')'
else :
k += '('
return k
def solution(p) :
global answer
answer = ''
return get_collect_string(p)
👩🏫접근 방식
- 각 단계별로 함수화 하고, 재귀 함수를 통해 전체 단계를 구현.
방금그곡
🤖문제 : 방금그곡 Lv2
😎풀이
def convert_sound_to_int(s) :
s = s.replace('A#', 'H')
s = s.replace('C#', 'I')
s = s.replace('D#', 'J')
s = s.replace('F#', 'K')
s = s.replace('G#', 'L')
return s
def solution(m, musicinfos) :
r_m = convert_sound_to_int(m)
possible_lst = []
for info in musicinfos :
info = info.split(',')
start, end, title, sound = info[0], info[1], info[2], info[3]
running_time = (int(end[:2])*60 + int(end[3:])) - (int(start[:2])*60 + int(start[3:]))
r_sound = convert_sound_to_int(sound)
running_r_sound = r_sound*(running_time//len(r_sound)) + r_sound[:(running_time%len(r_sound))]
if len(r_m) >= 2 :
for i in range(running_time)[:-len(r_m)+1] :
if running_r_sound[i:i+len(r_m)] == r_m :
possible_lst.append((running_time,title))
else :
for i in range(running_time)[:-len(r_m)] :
if running_r_sound[i:i+len(r_m)] == r_m :
possible_lst.append((running_time,title))
if len(possible_lst) == 0 :
return "(None)"
else :
possible_lst = sorted(possible_lst, key=lambda x : x[0], reverse=True)
return possible_lst[0][1]
👩🏫접근 방식
- #이 들어간 음표는 2글자 이므로 1글자로 mapping 시킴.
- 문제 내용대로 구현.
줄 서는 방법
🤖문제 : 줄 서는 방법 Lv2
😎풀이
import numpy as np
def solution(n, k) :
k -= 1
answer = [0 for _ in range(n)]
add_lst = [i+1 for i in range(n)]
for i in range(n) :
idx = k//np.math.factorial(n-i-1)
answer[i] = add_lst[idx]
add_lst.pop(idx)
k = k%np.math.factorial(n-i-1)
return answer
👩🏫접근 방식
- n_lst = [1, 2, 3, 4 ..., n] 일때
- i번째 자리의 숫자는 k를 (n-i)!로 나눈 몫을 구하고, n_lst에서 해당 순서의 값으로 입력.
- n_lst에서 해당 값을 출력, k는 나머지 값으로 업데이트.
- i+1 번째 자리의 숫자는 k를 (n-(i+1))!으로 나눈 목을 구하고, .... (위와 동일하게 설정.)