ํคํจ๋ ๋๋ฅด๊ธฐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
def solution(numbers, hand):
results = []
left = 10
right = 12
for number in numbers :
if number in [1, 4, 7] :
results.append('L')
left = number
elif number in [3, 6, 9] :
results.append('R')
right = number
else : # 2, 5, 8, 0์ ๊ฒฝ์ฐ ๊ฑฐ๋ฆฌ ๊ณ์ฐ
if number == 0: number = 11
q_l, r_l = divmod(left-1, 3) # ์ผ์ ์ซ์์ ์ขํ
q_r, r_r = divmod(right-1, 3) # ์ค๋ฅธ์ ์ซ์์ ์ขํ
q_n, r_n = divmod(number-1, 3) # ํ์ฌ ์ซ์์ ์ขํ
if abs(q_n - q_r) + abs(r_n - r_r) > abs(q_n - q_l) + abs(r_n - r_l):
results.append('L')
left = number
elif abs(q_n - q_r) + abs(r_n - r_r) < abs(q_n - q_l) + abs(r_n - r_l) :
results.append('R')
right = number
else : # ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
if hand == 'right' :
results.append('R')
right = number
else :
results.append('L')
left = number
return ''.join(results)
์์ ์ต๋ํ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
์ด ๋ฌธ์ ๋ ์ ๊ฐํผ ์ฝ๋๋ณด๋ค ์๊ณจ์ฐ์ , ์ ์ฒ ํธ ๋๊ป์ ํผ ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ์ธ๋ จ๋์ด์ ๊ทธ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ํ์ด๋ฅผ ํด๋ณด๊ฒ ์ต๋๋ค.
import re
from itertools import permutations
def solution(expression):
#1
op = [x for x in ['*','+','-'] if x in expression]
op = [list(y) for y in permutations(op)]
ex = re.split(r'(\D)',expression)
#2
a = []
for x in op:
_ex = ex[:]
for y in x:
while y in _ex:
tmp = _ex.index(y)
_ex[tmp-1] = str(eval(_ex[tmp-1]+_ex[tmp]+_ex[tmp+1]))
_ex = _ex[:tmp]+_ex[tmp+2:]
a.append(_ex[-1])
#3
return max(abs(int(x)) for x in a)
๋ณด์ ์ผํ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ ์ฝ๋ฉ ํ ์คํธ์์ ์๊ฐ์ก์๋จน๋ ๋น์จ์ด ์ฝ๋ฉ 10%, ์๊ณ ๋ฆฌ์ฆ ๊ณ ์ 90% ์ธ๊ฒ๊ฐ๋ค. ํนํ๋ ํจ์จ์ฑ์ด ํฌํจ๋ ๋ฌธ์ ๋ผ๋ฉดโฆ
์ด๋ฌธ์ ์์ ํจ์จ์ฑ์ ํต์ฌ์ Dictionary๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด๋ค.

์ปค์๊ฐ ์ด๋ํ๋ฉฐ ์ฅ๋ฐ๊ตฌ๋(Dictionary)์์ ๋ชจ๋ ๋ณด์์ข
๋ฅ๊ฐ ๋ค์ด์ฌ๋ ๊น์ง R ์ปค์๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๊ณ , ๋ชจ๋ ๋ณด์ ์ข
๋ฅ๊ฐ ์ฅ๋ฐ๊ตฌ๋์์ ๋ค์ด์ค๋ฉด ์ผ์ชฝ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํค๋ฉฐ ๋ฒ์๋ฅผ ์ค์ฌ๋๊ฐ๋ค.
์ต์ข
์ ๋ต์ ์ ๋ต ํ๋ณด์ค ๊ฐ์ฅ ๊ธธ์ด๊ฐ ์งง์(R - L) [L, R]์ returnํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฅ๋ฐ๊ตฌ๋์ ๋ณด์์ด 0๊ฐ๊ฐ ๋๋ฉด ์ญ์ ๋ฅผ ์์ผ์ฃผ์ด์ผํ๊ณ , ์ด๋ฏธ ์๋ ๋ณด์์ด๋ฉด +1 ํด์ฃผ์ด์ผํ๋ค. ์๋ํ๋ฉด ์ด ๋ฌธ์ ์์ ํจ์จ์ฑ์ ํ๋จํ๋ ํต์ฌ์ด ๋ฐ๋ก ์ฅ๋ฐ๊ตฌ๋์ ์ฌ์ด์ฆ๋ก ๋ชจ๋ ์ข
๋ฅ์ ๋ณด์์ ์๋์ง๋ฅผ ํ๋จํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
**
def solution(gems):
products = list(set(gems))
l = 0
r = 0
bucket = {}
answer = [0, len(gems)]
while(l <= len(gems) and r <= len(gems)) :
if len(bucket) == len(products) :
if answer[1]-answer[0] > r-l:
answer = [l, r]
bucket[gems[l]] -= 1
if bucket[gems[l]] == 0 : del bucket[gems[l]]
l += 1
else :
try :
if gems[r] in bucket : bucket[gems[r]] += 1
else : bucket[gems[r]] = 1
except :
break
r += 1
answer[0] += 1
return answer
๋ณด์์ ๋ช์ข
๋ฅ ์ฌ์ผํ๋์ง๋ฅผ set์ ์ด์ฉํ์ฌ ๊ตฌํด์ค๋๋ค.
products = list(set(gems))
๋๊ตด ํํ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ ์ด ๋ฌธ์ ๋ ์ด๋ป๊ฒ ํ์ด์ผํ ์ง ๊ฐ์ด ์์กํ์ ํ์ด ํด์ค์ ๋ดค์ง๋งโฆ ํด์ค๋๋ก ๊ตฌํ์ ํด๋ ํจ์จ์ฑ์์ ๊ณ์ ๋งํ์ ์ฑ๊ณตํ ์ฌ๋์ ์ฝ๋์ค ๊นํ์ฐ๋์ ์ฝ๋๊ฐ ๊ฐ์ฅ ์ ์ง ๊ฑฐ๊ฐ์์ ๊ทธ๋ถ์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ๊ณต๋ถํ์ต๋๋ค.
import sys
sys.setrecursionlimit(10**6)# ์ฌ๊ท ๊น์ด ์ค์
def haveCycle(node):
if visit[node]:
if visit[node] == -1:
return True
return False
visit[node] = -1
for _next in inv_graph[node]:
if haveCycle(_next):
return True
visit[node] = 1
return False
def make_inv_graph(node, parent):
for child in graph[node]:
if child != parent:
inv_graph[child].append(node)
make_inv_graph(child, node)
def solution(n, path, order):
global graph, inv_graph, visit
graph, inv_graph, visit = [[] for _ in range(n)], [[] for _ in range(n)], [0]*n
for parent, node in path:
graph[parent].append(node)
graph[node].append(parent)
make_inv_graph(0, -1)
for parent, node in order:
inv_graph[node].append(parent)
for node in range(n):
if haveCycle(node):
return False
return True
import heapq
from collections import deque
def solution(board):
n = len(board)
# ์, ์ฐ, ํ, ์ข
directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]
cost_board = [[[float('inf')] * 4 for _ in range(n)] for _ in range(n)]
# ์ฐ์ ์์ ํ ์ฌ์ฉ
queue = []
heapq.heappush(queue, (0, 0, 0, -1)) # ๋น์ฉ์ ๋งจ ์์ ๋์ด ์ฐ์ ์์ ๊ฒฐ์
while queue:
cost, h, w, direction = heapq.heappop(queue)
for d, (dh, dw) in enumerate(directions):
h_new, w_new = h + dh, w + dw
if direction != -1 and d == (direction + 2) % 4: continue # ์ญ์ฃผํ
if 0 <= h_new < n and 0 <= w_new < n and board[h_new][w_new] == 0:
cost_new = cost + 100
if direction != -1 and direction != d:
cost_new += 500
if cost_new <= cost_board[h_new][w_new][d]:
cost_board[h_new][w_new][d] = cost_new
heapq.heappush(queue, (cost_new, h_new, w_new, d))
return min(cost_board[n - 1][n - 1])