목록코딩테스트/2021 KAKAO BLIND RECRUITMENT (7)
JH 개발 블로그
def solution(sales, links): sales = [0] + sales tree = [[] for _ in range(len(sales)+1)] for a,b in links: tree[a].append(b) d = [[0,0] for _ in range(len(sales)+1)] dfs(1,d,tree,sales) return min(d[1]) def dfs(node,d,tree,sales): if not tree[node]: d[node][0] = sales[node] d[node][1] = 0 return d[node][0] = sales[node] min_gap = float('inf') for i in tree[node]: dfs(i, d, tree, sales) d[node][0..
from collections import deque def ctrl_move(r, c, dr, dc, board): while True: r += dr c += dc if 0 2b 1a->1b->2b->2a 1b->1a->2a->2b 1b->1a->2b->2a 총 4가지 입니다. 격자가 4*4로 작기때문에, bfs로 모든 경우를 확인합니다. board를 문자열로 바꾸는 이유는 만약 리스트 형태에서 수정한다면 현재 q에 들어있는 모든 board도 같이 수정되기 때문에 매번 board를 copy 해줘야 하는 번거로움이 있기 때문입니다. enter = -1 일땐, 현재 뒤집은 카드가 없습니다. enter != -1 일땐, 현재 카드를 하나 뒤집은 상태이고, 카드의 위치를 나타냅니다. 만약 현재 위치와 ent..
def time_to_sec(time): #hh:mm:ss를 초로 바꿔줍니다 time = list(map(int, time.split(':'))) return 3600 * time[0] + 60 * time[1] + time[2] def solution(play_time, adv_time, logs): play_time = time_to_sec(play_time) # 초 변환 adv_time = time_to_sec(adv_time) # 초 변환 viewrs = [0] * (play_time + 1) for log in logs: section = log.split('-') start, end = time_to_sec(section[0]), time_to_sec(section[1]) viewrs[star..
다익스트라, 플로이드와샬 두가지 알고리즘으로 문제를 풀 수 있습니다. 다익스트라 import heapq def dijkstra(s,i): global n,graph hq = [(s,0)] heapq.heapify(hq) visited = [float('inf')]*(n+1) visited[s] = 0 while hq: now_node,now_fare = heapq.heappop(hq) if now_fare > visited[now_node]: continue for fare,node in graph[now_node]: sum_fare = now_fare+fare if sum_fare < visited[node]: visited[node] = sum_fare heapq.heappush(hq,(node,su..
from bisect import bisect_left from collections import defaultdict def solution(info, query): candidates = defaultdict(list) answer = [] for i in range(len(info)): temp = info[i].split() for i in [temp[0], '-']: for j in [temp[1], '-']: for k in [temp[2], '-']: for l in [temp[3], '-']: candidates[(i,j,k,l)].append(int(temp[4])) for c in candidates: candidates[c].sort() for i in range(len(query))..
from itertools import combinations from collections import Counter def solution(orders, course): answer = [] temp = [] for order in orders: temp.append(sorted(order)) orders = temp for size in course: temp = [] for order in orders: temp += combinations(order,size) temp = Counter(temp).most_common() for menu, cnt in temp: if cnt >= 2 and cnt >= temp[0][1]: answer.append(menu) else: break return s..
import re def solution(new_id): new_id = re.sub('[^a-z\d\-_.]','',new_id.lower()) new_id = re.sub('\.\.+','.',new_id) new_id = re.sub('^\.|\.$','',new_id) if new_id == '': new_id = 'a' new_id = re.sub('\.$','',new_id[:15]) while len(new_id) < 3: new_id += new_id[-1] return new_id 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마..