파이썬 46

[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 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)!_ - 두 개의 좌표 중 하나라도 원점 좌표와 일치하지 않으면, _!참!_이 되어야 하지만(스위칭이 아니므로) 기존 조건식은 _!거짓!_ 처리 중이었다...

알고리즘 2024.10.04

[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

[Python | 프로그래머스 | Lv_2] 뒤에 있는 큰 수 찾기

😉 아이디어1. 덱 자료구조 활용2. 덱에 인덱스를 담아두고 다음 순회되는 값이 덱의 가장 최근에 추가된 값보다 큰 경우 _!answer!_ 변수에 담고 반환😉 풀이 from collections import dequedef solution(numbers): dq = deque() answer = [-1] * len(numbers) for i in range(len(numbers)): while dq and numbers[dq[-1]] ✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/154539

알고리즘 2024.08.24

[Python | 프로그래머스 | Lv_3] 입국심사

😉 아이디어1. 이분탐색을 통해 모든 인원이 통과가능한 최적의 값을 탐색2. _!시간 // 심사관의 처리시간!_의 합은 해당 시간 동안 처리 가능한 총 인원😉 풀이def solution(n, times): answer = 0 left = 1 right = 1_000_000_000_000 * 1_000_000_000_000 while left = n: answer = mid right = mid - 1 else: left = mid + 1 return answer✔️ 링크 : https://school.programmers.co.kr/learn/courses/30/lessons..

알고리즘 2024.07.26

[Python | 프로그래머스 | Lv_3] 징검다리 건너기

😉 아이디어1. 이진탐색 기반으로 _!1 ~ 200000000!_의 범위 중 얼마나 많은 사람들이 징검다리가 통과가능한지 찾는 문제😉풀이def solution(stones, k): left, right = 1, 200_000_000 maxPeople = 0 while left = k: break else: blockedCnt = 0 # 건널 수 없는 돌의 개수 확인 if blockedCnt >= k: # 막힌 돌이 k개 이상이면 실패 right 감소 right = mid - 1 else:..

알고리즘 2024.07.18