코테 공부/코테 전략&팁 6

최단 경로 알고리즘: 다익스트라, 플로이드 워셜

1. 다익스트라 알고리즘 2. 다익스트라 heap을 사용해 구현하기 3. 플로이드 워셜 알고리즘 4. 플로이드 워셜 구현하기 * 인접 행렬 VS 인접 리스트 다익스트라 알고리즘 (dijkstra) 그래프에 여러 개의 노드가 있을 때, 특정 노드에서에서 출발해 다음 노드로 가는 각각의 최단 경로를 구하는 알고리즘이다. 단, '음의 간선(0보다 작은 값을 가지는 간선)'이 없어야 한다. 다익스트라는 매번 '가장 비용이 적은 노드'를 선택하고, 임의의 과정을 반복하기 때문에 그리디 알고리즘으로 분류된다. 다익스트라는 '현재 노드에서 각 노드에 대한 최단 거리' 정보를 1차원 리스트에 저장하며 리스트를 계속 갱신해 나간다. 이 리스트가 '최단 거리 테이블'이다. 즉, 현재 처리하고 있는 노드와 인접한 노드로 도..

서로소 집합을 활용한 사이클 판별(같은 팀인지 파악)

1. 각 edge를 확인하며 두 node의 root node를 확인 - root node가 서로 다르다면 두 노드에 대해 union 연산 수행 - root node가 서로 같다면 cycle이 발생한 것임 (같은 팀임) 2. 그래프에 포함된 모든 edge에 대해 반복 입력 첫째줄에 노드의 개수, 간선(edge)의 개수 입력받기 cycle 생성 여부 출력하기 예제 입력 예제 출력 3 3 1 2 1 3 2 3 사이클 없음 def find_parent(parent, x): # x의 부모 (속한 집합) 찾기 if parent[x] != x: # parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(parent, a, b): # 두..

[꿀팁] 입력 값을 변수 두 개에 저장하기

a, b = input('문자열 두 개를 입력하세요: ').split() # 입력받은 값을 공백을 기준으로 분리 print(a) print(b) # Hello Python 입력하고 엔터키 누르면 # Hello # Python # 위처럼 출력됨 단, 문자열로 입력됨 입력 값을 정수로 변환하기 a, b = input('숫자 두 개를 입력하세요: ').split() # 입력받은 값을 공백을 기준으로 분리 a = int(a) # 변수를 정수로 변환한 뒤 다시 저장 b = int(b) # 변수를 정수로 변환한 뒤 다시 저장 print(a + b) # 숫자 두 개를 입력하세요: 10 20 (입력) # 30 매번 split의 결과를 int로 변환해주기 귀찮으니까 map을 사용 a, b = map(int, input(..

[꿀팁] Python 2차원 배열 회전

2차원 배열 회전 90° 회전하기 전(n = 3) b a - c - - - - - 90° 회전후 - c b - - a - - - 이때 a, b, c 각각의 좌표는 다음과 같다 90도 회전 전 90도 회전 후 a (0, 1) (1, 2) b (0, 0) (0, 2) c (1, 0) (0, 1) 위의 좌표값 변화에서 규칙을 찾아볼 수 있다. 회전전의 열 번호와 회전후의 행 번호는 일치하며 회전후의 열은 N(표의 길이)-1에서 회전전의 행을 뺀 값과 같다. def rotate_90_degree(arr): n = len(arr) rotate_arr = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): rotate_arr[j][n - 1 - i]..