일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- CSS
- DFS
- 코딩
- 알고리즘
- AI
- kick start
- 동적 프로그래밍
- 리눅스
- PYTHON
- 동적프로그래밍
- 백준
- 그래프
- 구글 킥스타트
- OS
- 운영체제
- nlp
- 파이썬
- 딥러닝
- 프로그래머스
- 코딩테스트
- 순열
- 브루트포스
- 프로그래밍
- 코딩 테스트
- linux
- BFS
- 킥스타트
- 네트워크
- google coding competition
- dp
- Today
- Total
목록MST (6)
오뚝이개발자
Greedy algorithm이란? 매 의사결정마다 정해둔 조건에 따라 가장 좋아보이는 답을 선택하는 것 Greedy algorithm(탐욕알고리즘)은 어디에 쓰이나? 주로 특정 제한조건(Constraints)을 만족해야 하는 상황에서의 최적화 문제에 사용 예) machine scheduling, bin packing, minimum spanning tree(MST) MST란? Spanning tree란 그래프의 모든 노드를 포함하는 트리이다. 이 때, MST란 edge의 가중치 합의 최소인 spannig tree이다. Shortest path problem(추후 자세히 포스팅) 다익스트라 알고리즘(Single source all destination) MST(각 방법별로 추후 자세히 포스팅) Krusc..

문제설명 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A 섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A 섬과 C 섬은 서로 통행 가능합니다. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i] [1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다...
문제 https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만들어 보려고 한다. 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. 화면에 있는 이모티콘 중 하나를 삭제한다. 모든 연산은 1초가 걸린다. 또, 클립보드에 이모티콘을 복사하면 이전에 클립보드에 있던 내용 www.acmicpc.net 생각의 흐름 결국 최종적으로는 화면에 n개의 이모티콘이 있어야 하는데 이 때, 클립보드에 있는 이모티콘의 갯수가 0~n-1개 일..
문제 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 생각의 흐름 이전에 포스팅했던 알고스팟과 유사한 문제이다. 차이점은 2가지이다. 시작점과 끝점의 칸 수를 포함하여 계산한다는 점 알고스팟의 경우 칸의 수가 1인 경우와 0인 경우 모두 이동이 가능했지만 본 문제의 경우 1인 경우에만 이동이 가능하다는 점 코드 from queue import PriorityQueue as pq def dijkstra(): heap = pq() heap.put((1, (0, 0))) crush..
문제 https://www.acmicpc.net/problem/1261 1261번: 알고스팟 첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미한다. (1, 1)과 (N, M)은 항상 뚫려있다. www.acmicpc.net 생각의 흐름 (0,0)을 시작점으로 보고 (n-1, m-1)칸, 다시말해 우측 맨 하단의 칸을 도착지점으로 보고 최단경로를 찾기 위한 다익스트라 알고리즘을 적용하면 된다. 이 때, 1이 있는 곳으로 이동할 때에는 벽을 부숴야 하기 때문에 가중치가 1인 것으로, 0인 곳은 가중치가 0인 것으로 보면 된다. 어려운 부분은 최..
문제 https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다. 항상 순회할 수 있는 경우만 입력으로 주어진다. www.acmicpc.net 생각의 흐름 n개의 도시들을 1부터 n까지 넘버링하여 리스트에 삽입한다. 도시 리스트를 next_permutation() 함수를 이용해 가능한 모든 순열마다 input으로 주어진 weight 정보를 이용해 cost를 계산해 비교한다.(브루트포스) 이 때, weight가 ..