알고리즘 91

[JavaScript | 프로그래머스 | Lv_2] 도넛과 막대 그래프 (2024 KAKAO WINTER INTERNSHIP)

😉 아이디어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..

알고리즘 2024.10.05

[Python | 프로그래머스 | Lv_3] 수레 이동하기 (PCCP 기출문제)

😉 아이디어1. 2개의 수레에 대한 좌표 탐색 중첩 👉 이중 탐색 DFS or BFS2. 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) - 두 개의 좌표 중 하나라도 원점 좌표와 일치하지 않으면, 참이 되어야 하지만(스위칭이 아니므로) 기존 조건식은 거짓 처리 중이었다...

알고리즘 2024.10.04

[Python | 프로그래머스 | Lv_2] 아날로그 시계 (PCCP 기출문제)

😉 아이디어1. 매 초 진행 시 시침, 분침, 초침의 각도를 계산하고 prev_angles에 저장한다.2. 현재 시침, 분침, 초침을 비교하고 일치하는 부분이 있다면 알람 횟수 증가3. 일치하는 부분이 없다면, 1초 전의 각도와 비교한다. 초침의 각도가 분침 혹은 시침보다 작았는데, 현재 시간에서는 앞서 있다면 알람이 울렸던 것이므로 횟수를 추가한다.* 이전의 초침이 354도 였다면 1초 후에는 360도 계산해야 올바른 추월을 계산할 수 있다. 그렇지 않으면 0도로 계산된다.😉 풀이def solution(h1, m1, s1, h2, m2, s2): answer = 0 # 초기 각도를 계산하고 1초씩 늘려서 생기는 각도의 변화에 따라 겹치는지 여부 확인 st..

알고리즘 2024.09.29

[Python | 프로그래머스 | Lv_2] 충돌위험 찾기 (PCCP 기출문제)

😉 아이디어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 ..

알고리즘 2024.09.26

[Python | 프로그래머스 | Lv_3] 수식 복원하기 (PCCP 기출문제)

😉 아이디어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..

알고리즘 2024.09.26

[Python | 프로그래머스 | Lv_2] 퍼즐 게임 챌린지 (PCCP 기출문제)

😉 아이디어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_..

알고리즘 2024.09.14

[Python | 프로그래머스 | Lv_3] 연속 펄스 부분 수열의 합

😉 아이디어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..

알고리즘 2024.09.14

[Python | 프로그래머스 | Lv_3] 퍼즐 조각 채우기

😉 아이디어1. BFS 활용 매트릭스별 조각 탐색2. game_board 조각 기준 table 조각 대입 및 검증3. 검증된 조각의 경우 제거 👉 데이터 중복 방지😉 풀이from collections import dequedef solution(game_board, table): answer = 0 # 매트릭스 내 조각 탐색 board_pieces = find_pieces(game_board, 0) table_pieces = find_pieces(table, 1) for blank in reversed(board_pieces): for puzzle in reversed(table_pieces): i..

알고리즘 2024.09.14

[Python | 프로그래머스 | Lv_3] 합승 택시 요금

😉 아이디어1. 다익스트라(dijkstra) 알고리즘 구현이 포인트2. 각자 택시를 타고 목적지로 간 경우 or 중간 목적지까지 함께 이동하고 각자 이동한 cost를 비교😉 풀이import heapq # 우선순위큐from math import infdef solution(n, s, a, b, fares): graph = [[] for _ in range(n + 1)] for start, end, cost in fares: # 각 노드와 연결된 edge 체크 graph[start].append([end, cost]) graph[end].append([start, cost]) def dijkstra(start, end)..

알고리즘 2024.08.27