목록코딩테스트 (45)
JH 개발 블로그
def dfs(n, info, k, apeach, lion, temp): if n == 0: global max_val, answer if lion - apeach > max_val: max_val = lion - apeach answer = temp[:] elif lion - apeach == max_val and max_val != 0: for i in range(10, -1, -1): if temp[i] > answer[i]: answer = temp[:] break elif temp[i] info[i]: temp[i] = info[i] + 1 if info[i] > 0: dfs(n - temp[i]..
from collections import defaultdict import math def time_to_minutes(time): time = time.split(':') return 60*int(time[0]) + int(time[1]) def solution(fees, records): cars = defaultdict(list) answer = [] for record in records: record = record.split() time = time_to_minutes(record[0]) cars[int(record[1])].append(time) for num in sorted(cars.keys()): if len(cars[num])%2 != 0: cars[num].append(1439) ..
def convert(n, k): s = '' while n: s += str(n%k) n //= k return s[::-1] def isprime(num): if num == 1: return False i = 2 while i*i s 2. s를 '0'을 기준으로 나눈 배열의 각 값이 소수인지 검사합니다
def solution(id_list, report, k): answer = [] id_dict = {x:[] for x in id_list} reported_id = {x:0 for x in id_list} report = set(report) for id in report: id = id.split() reported_id[id[1]] += 1 id_dict[id[0]].append(id[1]) for id in id_list: cnt = 0 for reportid in id_dict[id]: if reported_id[reportid] >= k: cnt += 1 answer.append(cnt) return answer 중복 제거를 위해 report 리스트를 set으로 바꿔줍니다. id_dict[신..
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..