키패드 누르기
def solution(numbers, hand):
answer = ''
left, right = [1, 4, 7], [3, 6, 9]
n_left, n_right = 10, 12
l_distance, r_distance = 0, 0
for i in numbers:
if i in left:
answer += 'L'
n_left = i
elif i in right:
answer += 'R'
n_right = i
else:
if i == 0 :
i = 11
l_distance = abs(i - n_left)
r_distance = abs(i - n_right)
if l_distance // 3 + l_distance % 3 > r_distance // 3 + r_distance % 3:
n_right = i
answer += 'R'
elif l_distance // 3 + l_distance % 3 < r_distance // 3 + r_distance % 3:
n_left = i
answer += 'L'
else:
if hand == 'right':
n_right = i
answer += 'R'
else:
n_left = i
answer += 'L'
return answer
불량사용자
from itertools import permutations
import re
def solution(user_id, banned_id):
answer = set()
n = len(banned_id)
perm = list(permutations(user_id, n)) #밴 당한 수만큼 순열
for p in perm:
cnt = 0
for i in range(n):
temp = banned_id[i].replace('*', '.') #fr.d. 스타일로 변경
if not re.match(temp, p[i]) or len(banned_id[i]) != len(p[i]): #정규표현식이랑 다르거나, 아이디길이 다를 때
break
else:
cnt += 1
# 해당 순열 원소의 부정사용자가 banned id 길이와 일치할 때
if cnt == n:
answer.add(frozenset(p)) #set 처리해야되니까 집합 자체를 추가
return len(answer)
두 큐의 합을 같게 만들기
from collections import deque
def solution(queue1, queue2):
answer = 0
queue1 = deque(queue1)
queue2 = deque(queue2)
timeout = (len(queue1)) * 4
total = sum(queue1) + sum(queue2)
sum1, sum2 = sum(queue1), sum(queue2)
#값은 큰 쪽에서 작은 쪽으로 이동함
while True:
if sum1 > sum2:
t = queue1.popleft()
queue2.append(t)
sum1 -= t
sum2 += t
answer += 1
elif sum1 < sum2 :
t = queue2.popleft()
queue1.append(t)
sum1 += t
sum2 -= t
answer += 1
else :
break
if answer == timeout:
answer = -1
break
return answer