본문 바로가기

코딩 테스트48

[백준 1504번] 특정한 최단 경로 문제 이 문제는 시작 노드에서 두개의 정점을 지나 마지막 노드까지 가는 경로의 최단 경로를 구하는 것으로, 시작노드(1) -> v1 -> v2 -> 마지막 노드(n)과 시작노드(1) -> v2 -> v1 -> 마지막 노드(n) 중 더 작은 값을 출력하면 된다. import sys input = sys.stdin.readline INF = int(1e9) # 노드의 개수, 간선의 개수 입력 받기 n, m = map(int, input().split()) # 각 노드에 연결 되어 있는 노드에 대한 정보를 담는 리스트 만들기 graph = [[] for i in range( n +1)] # 모든 간선 정보를 입력 받기 for _ in range(m): a, b, c = map(int ,input().split()).. 2023. 8. 7.
[백준 6593번] 상범 빌딩 문제 풀이 입력 파트가 까다로워 문제는 복잡해보였으나 기본적인 BFS 최단 경로 문제였다. 3차원 배열을 입력받을때, 경로를 구할 같은 크기의 3차원 배열을 만들어 주었다. - 입력 파트 : 0 0 0을 입력하기 전까지 계속 최단 경로를 구해주어야 한다. a 배열은 3차원 배열의 값을 입력받고, d 배열은 해당 위치까지의 최단 거리를 저장, q는 bfs의 거리를 구하는데 사용한다. while True: l, r, c = map(int, input().split()) if l == 0 and r == 0 and c == 0: break a = [[[]*c for _ in range(r)] for _ in range(l)] d = [[[0]*c for _ in range(r)] for _ in range(l)] q =.. 2023. 8. 6.
[개념] 다익스트라 알고리즘 간단한 다익스트라 알고리즘은 O(V^2)의 시간 복잡도를 가진다. ( V는 노드의 개수 ) ✔ 방법 1 import sys input = sys.stdin.readline INF = int(1e9) # 노드의 개수, 간선의 개수 입력 받기 n, m = map(int, input().split()) # 시작 노드 번호를 입력 받기 start = int(input()) # 각 노드에 연결 되어 있는 노드에 대한 정보를 담는 리스트 만들기 graph = [[] for i in range(n+1)] # 방문한 적이 있는지 체크하는 목적의 리스트 만들기 visited = [False] * (n+1) # 최단 거리 테이블을 모두 무한으로 초기화 distance = [INF] * (n+1) # 모든 간선 정보를 입력.. 2023. 8. 3.
[백준 2579번] 계단 오르기 문제 풀이 1. 계단이 1, 2개 일때는 모두 더한 값이 최대 값이다. 2. 계단이 3개 이상일 때는 현재 계단을 k (k>=3)번 이라 할때, (price[k] + price[k-2])와 price[k] + price[k-1] + price[k-3]) 의 값을 비교하여 최댓값을 저장해주어야 한다. n = int(input()) s = [int(input()) for _ in range(n)] # 각 계단의 점수 리스트 max_score = [0] * (n) if len(s) 2023. 8. 2.