본문 바로가기

BOJ 알고리즘 (패캠)

(52)
1439번: 뒤집기 (탐욕) www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net # 뒤집기 # https://www.acmicpc.net/problem/1439 (탐욕) def run(S): cnt_0 = 0 # 모든 수를 0 으로 만들때 뒤집기 횟수 cnt_1 = 0 # 모든 수를 1 로 만들떄 뒤집기 횟수 N = len(S) for i in range(N - 1): if S[i] == "0" and S[i + 1] == "1": cnt_0 += 1 elif S[i] == "1" and ..
5585번: 거스름돈 (탐욕) www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net # 거스름돈 # https://www.acmicpc.net/problem/5585 (탐욕) def run(money): coins = [500, 100, 50, 10, 5, 1] # ((큰 동전 순서로 선택해서)) 거스름돈 계산한다 res = 0 for coin in coins cnt = money // coin res += cnt money -= coin * cnt return res M..
1774번: 우주신과의 교감 (그래프, MST, 크루스칼) - Fastcampus www.acmicpc.net/problem/1774 1774번: 우주신과의 교감 (1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼 www.acmicpc.net import math def find(i): if parent[i] != i: parent[i] = find(parent[i]) return parent[i] def union(i, j): i = find(i) j = find(j) if i != j: parent[i] = j N, M = map(int, input().split()) loc = [(0, 0)] + [tuple(map(..
5719번: 거의최단경로 (그래프, 다익스트라) - Fastcampus www.acmicpc.net/problem/5719 5719번: 거의 최단 경로 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 장소의 수 N (2 ≤ N ≤ 500)과 도로의 수 M (1 ≤ M ≤ 104)가 주어진다. 장소는 0부터 N-1번까지 번호가 매겨져 있 www.acmicpc.net import sys import heapq import collections def dijkstra(N, start): qu = [] heapq.heappush(qu, (0, start)) dist = [float("inf")] * N dist[start] = 0 while qu: d, node = heapq.heappop(qu) if d > dist[node]: continue ..
10282번: 해킹 (그래프, 다익스트라) - Fastcampus www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net import sys import heapq def dijkstra(N, start): qu = [] heapq.heappush(qu, (0, start)) dist = [float("inf")] * (N+1) dist[start] = 0 while qu: d, node = heapq.heappop(qu) if d > dist[node]: continue for w, e in graph[node]: nd = d + ..
1325번: 효율적인해킹 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/1325 max_v: max_v = cnt ans = [i] elif cnt == max_v: ans.append(i) print(" ".join(map(str, ans)))
1012번: 유기농배추 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 � www.acmicpc.net from collections import deque def bfs(sx, sy): qu = deque([(sx, sy)]) while qu: x, y = qu.popleft() if not visited[x][y]: visited[x][y] = 1 for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]: nx, ny = x + dx, y + dy if 0
2606번: 바이러스 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어�� www.acmicpc.net from collections import deque # BFS-1: 큐에서 꺼내고 방문 마킹 def bfs(start): qu = deque([start]) visited = [0] * len(graph) cnt = 0 while qu: node = qu.popleft() if not visited[node]: visited[node] = 1 cnt += 1 # 로직 for e in graph[node]: qu..