분류 전체보기
-
[이코테] chap10. 그래프 이론Algorithm PS👩🏻💻/개념 2023. 5. 23. 03:00
서로소 집합 서로소 집합(Disjoint Sets)은 공통 원소가 없는 두 집합을 의미한다. 이때 집합 간의 관계를 파악하기 위해 서로소 집합 알고리즘을 사용할 수 있는데, 서로소 집합 알고리즘은 union-find 연산으로 구성되며, 모든 노드는 자신이 속한 집합을 찾을 때 루트 노드를 재귀적으로 찾는다. (즉, 루트 노드가 같으면 같은 집합으로 본다.) 서로소 집합 알고리즘은 최소 신장 트리를 찾는 크루스칼 알고리즘에서 사용되기도 하므로 중요하다. union 연산을 확인하며, 서로 다른 두 원소에 대해 합집합(같은 그룹으로 합치기)을 진행할 땐, 각각의 루트노드를 찾아 큰 루트노드가 더 작은 루트를 가리키도록 구현한다. 시간 복잡도: O(V + M(1 + log2-m/vV)) 서로소 집합 구현 코드 ..
-
[백준] 2141번: 우체국(Python)Algorithm PS👩🏻💻/백준 2023. 5. 22. 22:42
문제 링크 https://www.acmicpc.net/problem/2141 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 1 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 풀이 풀이 설명 - 분류 : 그리디 & 누적합 처음엔 '공유기 설치(이진탐색)'문제와 비슷해서 이건 '거리', '사람 수' 둘다 고려해야하는 이진탐색인가? 로 시작했지만, 결국 거리는 정렬 말고는 필요없는 문제였다. 처음엔 이해가 안돼서 여러 풀이를 봤는데 다들 사람의 총합/2를 넘는 부분에 놓으면 된다고..
-
[백준] 2212번: 센서 (Python)Algorithm PS👩🏻💻/백준 2023. 5. 15. 16:37
문제 링크 https://www.acmicpc.net/problem/2212 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 풀이 알고리즘 [그리디] 여러 센서의 후보들을 묶는 것으로 생각하면 k개의 묶음을 만들면 된다. 센서를 오름차순하여 좌표 순으로 놓는다. ex. [1, 6, 9, 3, 6, 7] -> [1, 3, 6, 6, 7, 9] 원소간의 차를 표현한 리스트를 만든다. -> diff = [2, 3, 0, 1, 2] 2개의 묶음을 만들기 위해선 1개의 간격을 버리면 된다. -..
-
[백준] 14719번: 빗물 (Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 14. 18:08
문제 링크 https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 풀이 풀이 설명 이중 배열을 만들어 벽은 1, 빈곳은 0 설정 양쪽이 벽으로 둘러싸여야 빗물이 고이므로, 현재 좌표 기준 왼쪽이 벽이고 현재가 비어있으면 현재 좌표를 리스트(starts)에 넣는다. 오른쪽으로만 탐색(bfs)하여 벽과 부딪힌 경우만 result에 빈 칸의 수를 넣는다. 풀이 코드 n, m = map(int, input().split()) walls = ..
-
[백준] 21314번: 민겸 수(Python)Algorithm PS👩🏻💻/백준 2023. 5. 14. 14:29
문제 링크 https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 풀이 풀이 설명 우선 문장에 K 포함 유무에 따라 나뉜다. K가 없는 경우 -> M만 있다는 뜻. result를 바로 구할 수 있다. ex. MMM인 경우 max: 111, min: 100 K가 있는 경우, K를 기준으로 나뉘기 수가 결정되므로 K의 위치를 담은 리스트(k_pos)를 전달해준다. def find_max(k_pos) # max 값을 찾는다. k를 포함하여 $5*10^N$ 꼴로 정리한다. 문장의 끝이 k가 아니라면, m으로 끝난다는 뜻이므로 마지막 k의..
-
[백준] 16926번: 배열 돌리기1(Python)Algorithm PS👩🏻💻/Implementation 2023. 5. 10. 13:28
문제 https://www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 문제 풀이 회전하는 행렬의 인덱스들을 1차원 배열로 뽑아 놓는다.(반시계방향으로) ex. n, m, r = 2, 3, 2 array = [[1, 2, 3], [4, 5, 6]] [(0, 0), (1, 0), (1, 1), (1, 2), (0, 2), (0, 1)] #위치 인덱스를 담은 배열 회전수 ..
-
[백준] 2615번: 오목 (완전탐색, Python)Algorithm PS👩🏻💻/백준 2023. 5. 10. 02:32
문제https://www.acmicpc.net/problem/2615 2615번: 오목오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호www.acmicpc.net 문제 풀이출력해야하는 제일 왼쪽(세로줄은 가장 위쪽) 좌표를 기준으로 [주 대각선, 세로줄, 가로줄, 부 대각선] 순으로 하여 4개의 방향을 탐색했다. (BFS)단, 조건으로 6개 연속인 바둑알은 승리가 아니므로, 연속된 조건의 count를 자신을 제외하고 각 방향으로 5번까지 진행한 후연속된 바둑알의 갯수가 4개인 경우(기준 좌표 제외)만 승리로 간주한다.n = 19blacks = []white..
-
[백준] 2887번: 행성 터널(그래프, Python)Algorithm PS👩🏻💻/백준 2023. 5. 10. 02:21
백준-행성터널(2887) 문제문제때는 2040년, 이민혁은 우주에 자신만의 왕국을 만들었다. 왕국은 N개의 행성으로 이루어져 있다. 민혁이는 이 행성을 효율적으로 지배하기 위해서 행성을 연결하는 터널을 만들려고 한다.행성은 3차원 좌표위의 한 점으로 생각하면 된다. 두 행성 A(xA, yA, zA)와 B(xB, yB, zB)를 터널로 연결할 때 드는 비용은 min(|xA-xB|, |yA-yB|, |zA-zB|)이다.민혁이는 터널을 총 N-1개 건설해서 모든 행성이 서로 연결되게 하려고 한다. 이때, 모든 행성을 터널로 연결하는데 필요한 최소 비용을 구하는 프로그램을 작성하시오.입력첫째 줄에 행성의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 다음 N개 줄에는 각 행성의 x, y, z좌표가 주어진..