본문 바로가기

전체 글168

[Programmers] 방의 개수 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 그래프 단원의 세 번째 문제입니다.I. DescriptionII. Codedef solution(arrows): directions = [(0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0), (-1, 1)] visited_nodes = set([(0, 0)]) visited_edges = set() room_count = 0 # 방의 개수 x, y = 0, 0 for arrow in arrows: dx, dy = directions[arrow] nx, ny = x + dx, y + dy if .. 2025. 8. 17.
[Programmers] 순위 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 Dynamics Programming 단원의 네 번째 문제입니다.I. DescriptionII. Codedef solution(n, results): win_graph = [[False] * (n + 1) for _ in range(n + 1)] # 주어진 승패 결과 반영 for winner, loser in results: win_graph[winner][loser] = True # A가 B를 이기고, B가 C를 이기면 A가 C를 이긴다고 표시 for k in range(1, n + 1): for i in range(1, n + 1): for j in rang.. 2025. 8. 17.
[Programmers] 가장 먼 노드 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 그래프 단원의 첫 번째 문제입니다.I. DescriptionII. Codefrom collections import defaultdict, dequedef solution(n, vertex): graph = defaultdict(list) for a, b in vertex: graph[a].append(b) graph[b].append(a) distances = [-1] * (n + 1) # 1번 노드로부터의 거리 distances[1] = 0 queue = deque([1]) # BFS 실행 while queue: current = queue.po.. 2025. 8. 17.
[Programmers] 징검다리 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 이분탐색 단원의 두 번째 문제입니다.I. DescriptionII. Codedef solution(distance, rocks, n): rocks.sort() rocks.append(distance) left, right = 1, distance while left n: break else: min_distance = min(min_distance, rock - prev) # 최소 거리 업데이트 prev = rock if removed > n: # 제거한 바위 수가 n을 넘.. 2025. 8. 17.
[Programmers] 입국심사 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 이분탐색 단원의 첫 번째 문제입니다.I. DescriptionII. Codedef solution(n, times): left, right = 1, max(times) * n # 최소 1분 ~ 최대 n명이 가장 느린 심사관에게 모두 가는 경우 answer = right # 최솟값을 찾는 문제이므로 초기값을 최대 값으로 설정 while left = n: # 모든 사람을 처리할 수 있다면, 시간을 줄여보기 answer = mid right = mid - 1 else: # 처리할 수 없다면, 시간을 늘리기 left = mid + 1 .. 2025. 8. 17.
[Programmers] 도둑질 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 Dynamics Programming 단원의 다섯 번째 문제입니다.I. DescriptionII. Codedef solution(money): n = len(money) dp = [0 for _ in range(n)] # 첫 번째 집을 털고 마지막 집을 털지 않는 경우 dp[0] = money[0] dp[1] = money[0] for i in range(2, n-1): dp[i] = max(dp[i-1], dp[i-2] + money[i]) max_money = dp[n-2] # 첫 번째 집을 털지 않는 경우 (마지막 집을 털 수 있음) dp[0] = 0 dp[1].. 2025. 8. 14.
[Programmers] 사칙연산 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 Dynamics Programming 단원의 네 번째 문제입니다.I. DescriptionII. Codedef solution(arr): # 숫자와 연산자 분리 numbers = [int(arr[i]) for i in range(0, len(arr), 2)] operators = [arr[i] for i in range(1, len(arr), 2)] n = len(numbers) max_dp = [[-float('inf') for _ in range(n)] for _ in range(n)] # 최댓값 dp min_dp = [[float('inf') for _ in range(n)] for _ in range(n).. 2025. 8. 14.
[Programmers] 단속카메라 시작하기 전에프로그래머스 알고리즘 고득점 Kit에서 Greedy 단원의 여섯 번째 문제입니다.I. DescriptionII. Codedef solution(routes): routes.sort(key = lambda x: x[1]) last_camera = -30001 cameras = 0 for start, end in routes: if last_camera 2025. 8. 14.