본문 바로가기
반응형

알고리즘 PS (백준)/🐍 Python (파이썬)46

파이썬(Python) 위상정렬 - 개념과 예제 (백준 2252) 위상 정렬 위상정렬은 사이클이 없는 방향 그래프에서 노드 순서를 찾는 알고리즘입니다. 사이클이 있다면 노드 순서가 정의되지 않고, 위상정렬은 항상 유일한 값으로 정렬되진 않습니다. 그래프가 있을때 인접리스트와 진입차수 리스트를 만들어야 합니다. 진입차수리스트는 자신을 가리치는 노드의 갯수를 의미하고, 인접리스트를 이용해서 만들수 있습니다. adjacent (인접리스트) 1 -> 2 3 2 -> 4 5 3 -> 4 4 -> 5 5 진입 자수 리스트 (in-degree) 각 노드마다 자신을 가리키는 노드의 갯수를 기록 하면 됩니다. 예를 들어 4는 2,3이 가리키고 있으므로 2입니다. 노드 1 2 3 4 5 차수 0 1 1 2 2 진입 차수 리스트에서 차수가 0인 것을 우선 선택하고 위상 정렬 리스트 첫번째.. 2022. 10. 15.
[백준 1504] 다익스트라(Dijkstra) - 파이썬 (Python) 특정한 최단 경로 문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야 한다는 것이다. 세준이는 한번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할 수 있다. 하지만 반드시 최단 경로로 이동해야 한다는 사실에 주의하라. 1번 정점에서 N번 정점으로 이동할 때, 주어진 두 정점을 반드시 거치면서 최단 경로로 이동하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a,.. 2022. 10. 14.
[백준 1238] 다익스트라(Dijkstra) - 파이썬 (Python) 파티 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 있고 i번째 길을 지나는데 Ti(1 ≤ Ti ≤ 100)의 시간을 소비한다. 각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다. 이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다.. 2022. 10. 14.
[백준 1916] 다익스트라(Dijkstra) 알고리즘 - 파이썬(Python) 다익스트라 알고리즘 다익스트라 알고리즘은 그래프에서 최단거리를 구하는 알고리즘으로, 가중치 그래프에서 한 정점에서 다른 정점과의 최단거리를 구하는 알고리즘 입니다. 다음과 같이 주어진 그래프를 인접리스트로 구현합니다. 한 노드에 대해 인접한 정점을 (노드번호, 거리) 튜플로 저장합니다. 1 -> (2,8) (3,3) 2 -> (4,4) (5,15) 3 -> (4,13) 4 -> (5,2) 5 위와 같이 인접리스트를 만든후, 최단 거리리스트를 초기화하고 탐색을 시작합니다. 정점 1부터 출발한다고 가정하겠습니다. (INF는 무한대 입니다.) 1 2 3 4 5 0 INF INF INF INF 그 중 거리가 가장 짧은 1을 채택해서 탐색합니다. 1 2 3 4 5 0 8 3 INF INF 1은 이제 탐색했으므로 .. 2022. 10. 14.
파이썬(Python) 다익스트라 개념과 예제-백준 1753번 다익스트라 알고리즘 다익스트라 알고리즘은 그래프에서 최단거리를 구하는 알고리즘으로, 가중치 그래프에서 한 정점에서 다른 정점과의 최단거리를 구하는 알고리즘 입니다. 다음과 같이 주어진 그래프를 인접리스트로 구현합니다. 한 노드에 대해 인접한 정점을 (노드번호, 거리) 튜플로 저장합니다. 1 -> (2,8) (3,3) 2 -> (4,4) (5,15) 3 -> (4,13) 4 -> (5,2) 5 위와 같이 인접리스트를 만든후, 최단 거리리스트를 초기화하고 탐색을 시작합니다. 정점 1부터 출발한다고 가정하겠습니다. (INF는 무한대 입니다.) 1 2 3 4 5 0 INF INF INF INF 그 중 거리가 가장 짧은 1을 채택해서 탐색합니다. 1 2 3 4 5 0 8 3 INF INF 1은 이제 탐색했으므로 .. 2022. 10. 14.
[백준 1016] 파이썬(Python) 제곱ㄴㄴ수 - 에라토스테네스의 체 제곱 ㄴㄴ 수 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수가 몇 개 있는지 출력한다. 입력 첫째 줄에 두 정수 min과 max가 주어진다. 출력 첫째 줄에 min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수의 개수를 출력한다. 제한 1 ≤ min ≤ 1,000,000,000,000 min ≤ max ≤ min + 1,000,000 예제 입력 1 1 10 예제 출력 1 7 에라토스테네스의 체 알고리즘 에라토스테네스의 체는 소수를 찾는 방법 중 하나입니다. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열합니다. 2 자신을 제외한 2의 배.. 2022. 10. 10.
[파이썬 Python] 에라토스테네스의 체(소수 구하기) 개념과 예제 - (백준 1747) 에라토스테네스의 체 알고리즘 에라토스테네스의 체는 소수를 찾는 방법 중 하나입니다. 2부터 소수를 구하고자 하는 구간의 모든 수를 나열합니다. 2 자신을 제외한 2의 배수를 모두 지웁니다. 남아있는 수 가운데 3은 소수이므로 놔두고, 자신을 제외한 3의 배수를 모두 지웁니다. 남아있는 수 가운데 5는 소수이므로 자기 자신을 제외한 5의 배수를 모두 지웁니다. 남아있는 수 가운데 7은 소수이므로 자신을 제외한 7의 배수를 모두 지운다. 위의 과정을 반복하면 구하는 구간의 모든 소수가 남게됩니다. Python 3으로 구현 일단 A 리스트를 인덱스와 수가 같도록 [0,0,2,3,4,5,6,7,8,9 ...] 로 초기화 해줍니다. (0,1은 제외) 2부터 2의 배수들을 차례로 0으로 만들어 줍니다. 이 방식을 .. 2022. 10. 10.