Algorithm 38

[python]백준 18405번: 경쟁적 전염(BFS)

# 18405 경쟁적 전염 https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 코드 from collections import deque n, k = map(int, input().split()) graph = [] data = [] for i in range(n): graph.append(list(map(int, input().split()))) for j in range(n): if graph[i][j] != 0:..

Algorithm 2023.01.03

[python]백준 1388번: 바닥 장식(DFS, BFS)

# 1388 바닥 장식 https://www.acmicpc.net/problem/1388 1388번: 바닥 장식 형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나 www.acmicpc.net 코드 DFS def dfs_horizontal(x,y): # 주어진 범위를 벗어나는 경우에 즉시 종료 if x = n or y = m: return False # 현재 노드를 아직 방문하지 않았다면 if graph[x][y] == '-': # 해당 노드 방문 처리 graph[x][y] = 'o' # 좌, 우의 위치들도 모두 재귀적으로 호출 dfs_horizontal(x, y - 1..

Algorithm 2023.01.02

[python]백준 1260번: DFS와 BFS(DFS, BFS)

# 1260 DFS와 BFS https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 코드 from collections import deque N, M, V = map(int, input().split()) graph = [[] for i in range(N+1)] for i in range(M): a, b = map(int, input().split()) graph[a].append(b) graph[b].appe..

Algorithm 2023.01.01

[python]백준 2606번: 바이러스(BFS)

# 2606 바이러스 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 코드 from collections import deque n = int(input()) v = int(input()) graph = [[] for i in range(n+1)] visited = [0] * (n+1) for i in range(v): a, b = map(int, input().split()) graph[a] += [b] graph[b] += [a] visited[..

Algorithm 2023.01.01

[python]백준 2606번: 바이러스(DFS)

# 2606 바이러스 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 코드 N = int(input()) C = int(input()) graph = [[] for i in range(N+1)] visited = [0] * (N+1) for i in range(C): a, b = map(int, input().split()) graph[a].append(b) graph[b].append(a) def dfs(M): visited[M] = 1 for n..

Algorithm 2022.12.31

[python]백준 15686번: 치킨 배달(브루트포스)

# 15686 치킨 배달 https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 코드 from itertools import combinations N, M = map(int, input().split()) graph = [list(map(int, input().split())) for _ in range(N)] house = [] # 집 좌표 chicken = [] # 치킨집 좌표 for r in range(N): # x for..

Algorithm 2022.12.31

[python]백준 1931번: 회의실 배정(그리디 알고리즘)

# 1931 회의실 배정 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 풀이 N = int(input()) list_ = [] for i in range(N): a,b = map(int, input().split()) # 시작시간, 끝나는 시간 list_.append([a,b]) list_.sort(key=lambda x:(x[1], x[0])) # 끝나는 시간을 기준으로 정렬, 시작 시간을 기준으로 정렬 last = 0 count = 0 for i, j in list_: # 시작과 끝 시간 if i >= last: # 끝나는 시간보다 시작시간이 클 경우 c..

Algorithm 2022.12.29

[python]백준 11053번: 가장 긴 증가하는 부분 수열(LIS)

잘못된 풀이 처음에 이 문제를 봤을 때 부분 수열에만 집중하고 가장 긴 증가하는 부분 수열을 보지 못했다. 문제만 봤을 때는 순서 상관없이 증가하기만 하면 카운트해주면 되는구나 생각하고 코드를 작성했었다. N = int(input()) list_ = list(map(int, input().split())) result = [] for i in range(len(list_)): if i == 0: result.append(list_[i]) elif list_[i] > list_[i-1]: result.append(list_[i]) print(len(result)) 실제로 위와 같이 코드를 작성하게 되면 의도한대로 예제 출력과 같은 값이 나오고, result라는 리스트에는 순차적으로 증가하는 [10, 20,..

Algorithm 2022.12.28
728x90