def solution(play, adv, logs):
to_seconds = lambda time_: sum([int(x)*y for x, y in zip(time_.split(':'), [3600, 60, 1])])
split = lambda times_ : times_.split('-')
play, adv = to_seconds(play), to_seconds(adv)
logs = sorted([s for start, end in map(split, logs) for s in [(to_seconds(start), 1), (to_seconds(end), -1)]])
viewers, cur_time, viewers_list = 0, 0, [0] * play
for log, state in logs:
if viewers > 0:
viewers_list[cur_time:log] = [viewers] * (log - cur_time)
viewers, cur_time = viewers + state, log
adv_filter, adv_start_time = (s := sum(viewers_list[:adv]), 0)
for i, j in zip(range(play - adv), range(adv, play)):
s += viewers_list[j] - viewers_list[i]
if s > adv_filter:
adv_filter, adv_start_time = s, i + 1
return f"{adv_start_time//3600:02d}:{adv_start_time%3600//60:02d}:{adv_start_time%60:02d}"
code by ์ค์๊ตฌ
from itertools import product
def solution(n, s, a, b, fares):
s, a, b = s - 1, a - 1, b - 1
DP = [[100000000] * n for _ in range(n)]
for v1, v2, cost in fares:
DP[v1 - 1][v2 - 1] = DP[v2 - 1][v1 - 1] = cost
for t in range(n):
DP[t][t] = 0
for via, i, j in product(range(n), repeat=3):
if DP[i][j] > (l := DP[i][via] + DP[via][j]):
DP[i][j] = l
return min(DP[s][k] + DP[k][a] + DP[k][b] for k in range(n))
๋ ํญ์ ๋ฌธ์ ํ๊ณ ๋ค๋ฅธ์ฌ๋๋ค์ ํ์ด ๋๋ต 3ํ์ด์ง๊น์ง ํ์ด๋ณด๋๋ฐ, ์ค์๊ตฌ ์ด์ฌ๋ ์ฝ๋ฉ์คํ์ผ์ด ๋๋ ๋น์ทํ๋ฐ ์ค๋ ฅ์ด ๋ ์ข๋ค. ๋ฑ ๋ณด๊ณ ์ค ์ข์น๋ค? ํ๊ณ ์ด๋ฆ๋ณด๋ฉด ์ค์๊ตฌ ์ด์ฌ๋์ธ ๊ฒฝ์ฐ๊ฐ ๊ฝค ๋ง์๋ค. ์ด๊ฒ๋ ์ด์ฌ๋ ์ฝ๋์
๋๋ฌด ์์งฐ๊ธธ๋ ๊ฐ์ ธ์ด
from collections import defaultdict
def solution(n, results):
answer = 0
win, lose = defaultdict(set), defaultdict(set)
for winner, loser in results:
lose[loser].add(winner)
win[winner].add(loser)
for i in range(1, n + 1):
for winner in lose[i]: win[winner] |= win[i]
for loser in win[i]: lose[loser] |= lose[i]
for i in range(1, n+1):
if len(win[i]) + len(lose[i]) == n - 1: answer += 1
return answer
from collections import defaultdict
def solution(genres, plays):
dic = defaultdict(list)
for i, info in enumerate(zip(genres, plays)) :
kind, play_time = info
dic[kind].append([i, play_time])
answer = []
for k in sorted(dic.values(), key = lambda info : sum(play_time for i, play_time in info), reverse = True) :
answer.extend(sorted(k, key = lambda info : info[1], reverse = True)[:2])
return [index for index, _ in answer]
import numpy as np
def solution(m, n, puddles):
board = [[0 for _ in range(m+1)] for _ in range(n+1)]
board[0][0]=1
for h in range(n) :
for w in range(m) :
if [w+1, h+1] in puddles: continue # ํ์ฌ ์์น๊ฐ ๋ฌผ์
๋ฉ์ด๋ผ๋ฉด continue
board[h][w+1] += board[h][w]
board[h+1][w] += board[h][w]
return board[n-1][m-1] % 1000000007
def solution(s):
for end in range(len(s), 0, -1):
for start in range(0, len(s)-end+1):
substr = s[start:start+end]
if substr == substr[::-1]:
return len(substr)
import numpy as np
def solution(n, times):
times = np.array(sorted(times))
min_ = times[0] * (n//len(times))
max_ = times[-1]* (n//len(times))
while min_ < max_ :
estimate = (min_+max_) // 2
total_p = (estimate//times).sum()
if total_p < n :
min_ = estimate+1
else :
max_ = estimate
return int(min_)
import bisect
def solution(operations):
answer = []
for operation in operations :
order, num = operation.split(' ')
if order == 'I' :
bisect.insort_left(answer, int(num))
elif answer :
if num == '-1' :
answer.pop(0)
else :
answer.pop(-1)
return [answer[-1], answer[0]] if answer else [0, 0]
from collections import defaultdict
import bisect
def solution(tickets):
graph = defaultdict(list)
for v1, v2 in tickets :
bisect.insort_left(graph[v1], v2)
stack = ['ICN']
visited = []
while stack :
airport = stack[-1]
if graph[airport] :
stack.append(graph[airport].pop(0))
else :
visited.append(stack.pop())
return visited[::-1]
from collections import Counter
def solution(begin, target, words):
if target not in words : return 0
visited = [begin]
que = [x for x in words if sum((Counter(begin)&Counter(x)).values()) == len(begin)-1]
t = 1
while que :
for _ in range(len(que)) :
child = que.pop(0)
if child == target : return t
if child not in visited :
que.extend([x for x in words if sum((Counter(child)&Counter(x)).values()) == len(child)-1])
t += 1