백준 1389. 케빈 베이컨의 6단계 법칙
·
백준
https://www.acmicpc.net/problem/13891. BFS 풀이# 모든 사람과의 거리가 제일 적은 사람 구하기!# 여러 명이면 번호가 가장 작은 사람from collections import dequen, m = map(int,input().split()) # 유저 수, 친구관계 수dp= [[] for _ in range(n+1)]for i in range(m): a, b = map(int,input().split()) dp[a].append(b) dp[b].append(a)dist = [[0] * (n+1) for _ in range(n+1)]for i in range(1, n+1): q = deque([i]) visited = [0] *(n + 1) ..
99클럽 코테 스터디 2일차 TIL + BFS
·
99클럽 코테 스터디
❇️오늘의 학습 키워드 : BFS BFS?- BFS는 탐색 시작점에서 가까운 노드부터 차례로 탐색하는 알고리즘(넓이 우선 탐색)- 큐(Queue) 자료구조를 사용하여 방문해야 할 노드를 저장하고, 가장 먼저 큐에 추가된 노드부터 탐색(FIFO)BFS의 동작 원리    (1) 시작 노드를 큐에 삽입 + 방문처리    (2) 큐에서 노드를 꺼내고, 해당 노드에 인접한 노드들 확인 -> 방문하지 않은 인접 노드는 큐에 추가+방문처리    (3) 1, 2를 큐가 빌 때까지 반복BFS의 특징- DFS가 경우의 수를 탐색하는데 유리하다면, BFS는 노드와 노드의 관계(최단 경로 등)를 탐색하는데 유리하다!BFS 코드 예제for i in range(1, n+1): q = deque([(i,0)]) visi..
백준 11403. 경로 찾기
·
백준
https://www.acmicpc.net/problem/11403n = int(input())arr = [list(map(int,input().split())) for _ in range(n)]# 경유지 m을 통해 i -> j로 갈 수 있는지 확인for m in range(n): for i in range(n): for j in range(n): # i->m, m->j로 갈 수 있으면 i->j로 갈 수 있다! if arr[i][m] == 1 and arr[m][j] == 1: arr[i][j] = 1for a in arr: print(*a)n이 100밖에 되지 않으므로 플로이드-워셜 알고리즘을 사용할 수 있었다!최..
99클럽 코테 스터디 1일차 TIL + 플로이드-워셜 알고리즘
·
99클럽 코테 스터디
❇️오늘의 학습 키워드 : 플로이드-워셜 알고리즘 플로이드-워셜 알고리즘?- 모든 정점 간의 최단 경로를 구하기 위한 알고리즘- 한 정점에서 모든 다른 정점까지의 최단 거리를 구하는 다익스트라와 달리, 모든 정점 쌍에 대해 최단 경로를 찾는 데 집중!플로이드-워셜 알고리즘의 동작 원리- 동적 계획법을 이용해 최단 경로를 점진적으로 구해나간다.-  경유지 k를 하나씩 추가하면서, i -> j 로 바로 가는 것보다 i -> k -> j 로 가는 경로가 더 짧으면 최단 거리 테이블을 갱신    (1) i == j 인 경우 0으로 설정 + 간선이 존재하는 i -> j 에 대해 가중치 입력. 경로가 없으면 INF로 초기화    (2) 정점 k를 경유지로 사용해, k를 경유해서 가는 경로가 더 짧으면 모든 i ->..
백준 10815. 숫자 카드
·
백준
https://www.acmicpc.net/problem/10815n = int(input())arr = sorted(list(map(int,input().split())))m = int(input())targets = list(map(int,input().split()))for target in targets: s = 0 e = n - 1 flag = False while s arr[m]: s = m + 1 elif target 이분탐색을 하지 않으면 시간초과에 걸릴 것이오...처음에 arr[m]을 해야되는데 그냥 냅다 m으로 작성해버려서 헤맸던...ㅋㅋ그리고 s와 e도 for문 안에 넣어줘야 한다.n = int(input()) # 상근이 카드ar..
백준 2805. 나무 자르기
·
백준
https://www.acmicpc.net/problem/28051. 처음의 시간초과 풀이n, k = map(int,input().split())arr = sorted(list(map(int,input().split())))ans = 0m = (arr[0] + arr[-1]) // 2while True: wood = 0 for i in arr: if i > m: wood += (i - m) if wood > k: m += 1 if wood == k: ans = m breakprint(ans)2. 이분탐색 풀이n, target = map(int,input().split())arr = list(map(int,input..