키패드 누르기

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