코딩/알고리즘

😉 아이디어1. 각 그래프별 특징 활용 _!막대 : 막대의 마지막 부분은 간선을 받기만 하고 주지는 않음!_, _!8자: 8자 중앙 노드는 받는 것과 주는 것이 2개씩!_2. 최초의 정점에서 뻗친 간선의 수 = 그래프의 총 개수😉풀이function solution(edges) { var answer = []; var totalNodeCount = edges.reduce((acc, edge) => { return Math.max(acc, ...edge) }, -Infinity) + 1 var inEdges = Array.from({ length: totalNodeCount }, () => []) var outEdges = Array.from({ length: to..
😉 아이디어1. 순서는 중요하지 않다. 몇명이 이길 수 있는지만 계산😉 풀이from collections import dequedef solution(A, B): A.sort(reverse = True) B.sort(reverse = True) dq_B = deque(B) count = 0 for a in A: while dq_B: b_value = dq_B.popleft() if b_value > a: count += 1 else: dq_B.appendleft(b_value) ..
😉 아이디어1. 2개의 수레에 대한 좌표 탐색 중첩 👉 이중 탐색 _!DFS or BFS!_2. 2개의 수레를 이동하는 중 _!수레의 위치가 서로 뒤바뀌는 경우!_와 _!두 개의 수레 도착 지점이 동일한 경우!_를 제외해야한다.3. _!수레의 위치가 서로 뒤바뀌는 경우!_의 조건문 체크에 오류가 있었다. - 기존 : _!(n_bx, n_by) != red_start and (n_rx, n_ry) != blue_start!_ - 수정 : _!not ((n_bx, n_by) == red_start and (n_rx, n_ry) == blue_start)!_ - 두 개의 좌표 중 하나라도 원점 좌표와 일치하지 않으면, _!참!_이 되어야 하지만(스위칭이 아니므로) 기존 조건식은 _!거짓!_ 처리 중이었다...
😉 아이디어1. 매 초 진행 시 시침, 분침, 초침의 각도를 계산하고 _!prev_angles!_에 저장한다.2. 현재 시침, 분침, 초침을 비교하고 일치하는 부분이 있다면 알람 횟수 증가3. 일치하는 부분이 없다면, 1초 전의 각도와 비교한다. 초침의 각도가 분침 혹은 시침보다 작았는데, 현재 시간에서는 앞서 있다면 알람이 울렸던 것이므로 횟수를 추가한다.* 이전의 초침이 _!354도!_ 였다면 1초 후에는 _!360도!_ 계산해야 올바른 추월을 계산할 수 있다. 그렇지 않으면 0도로 계산된다.😉 풀이def solution(h1, m1, s1, h2, m2, s2): answer = 0 # 초기 각도를 계산하고 1초씩 늘려서 생기는 각도의 변화에 따라 겹치는지 여부 확인 st..
😉 아이디어1. 최소 이동거리 간 이동경로를 모두 저장 👉 장애물이 없기 때문에 문제에서 제시한 _!rows!_ 부터 맞추고 _!cols!_ 를 맞추면 된다.2. 산출된 이동경로를 순회하며 같은 시간(인덱스)에 충돌하는 로봇의 지점 위치를 계산😉 풀이from collections import dequefrom collections import defaultdictdef solution(points, routes): answer = 0 rows, cols = 0, 0 for point in points: rows = max(rows, point[0]) cols = max(cols, point[1]) grid = [[0] * cols for ..
😉 아이디어1. _!expressions!_ digit 중 가장 큰 숫자를 선별하고 +1 해주어 2~9 진수 중 반복 단위를 최소화2. 예상 진수를 순회하며 _!10진수!_로 변환하고 값이 일치하는지 확인(X가 없는 계산식에만 적용)3. 주어진 식을 모두 일치시키면 _!candidates!_ 변수에 후보군으로 저장4. _!candidates!_ 변수를 순회하며 X가 있는 값들을 계산, 단 이전 후보군과의 계산 결과가 다르면 _!?!_로 표기😉 풀이def solution(expressions): answer = [] non_x_exprs = [] x_exprs = [] exprs = [] for expression in expressions: exprs.appen..
😉 아이디어1. _!1 ~ diffs!_ 사이 이분탐색 활용 최솟값 탐색2. 탐색 중 _!mid(level)!_ 값 로직 의거 총 소요시간 산출 및 비교😉 풀이# 이분탐색def solution(diffs, times, limit): low, high = 1, max(diffs) min_solved_time = pow(10, 15) while low limit: # 풀이시간 > limit => 숙련도 up low = level + 1 else: high = level - 1 min_solved_time = min(min_solved_time, level) return min_solved_..
😉 아이디어1. _!1 or -1!_로 시작하는 펄스수열이 적용된 리스트 생성2. 리스트 순회 중 최대값 기록 (순회 중인 값을 더해 음수의 값이 나온다면 기록하지 않고 초기화)3. 두 수열에서 최대값을 비교하고 더 큰 값을 반환😉 풀이def solution(sequence): answer = 0 p1 = [] p2 = [] val = 1 for i, s in enumerate(sequence): p1.append(val * s) # 1로 시작하는 시퀀스 p2.append(-val * s) # -1로 시작하는 시퀀스 val = val * -1 p1MaxSum = calculateMaxSum(p1) p2Ma..
thisisdj
'코딩/알고리즘' 카테고리의 글 목록