본문 바로가기

Algorithm

(19)
#289 백준 파이썬 [1766] 최단경로 - 다익스트라 https://www.acmicpc.net/problem/1753 SOLUTION 해당 문제는 다익스트라 알고리즘으로 풀 수 있다. 다익스트라 알고리즘은 https://www.youtube.com/watch?v=611B-9zk2o4이 분이 굉장히 잘 설명해주셨다. 서로서로 연결된 그래프의 K번째 노드에서 1,2,3, ... V개의 노드에 도달하는 가장 짧은 거리들을 구하는 것이다. 이 때 가장 짧은 노드는 지속적으로 갱신되기 때문에 우선 순위 큐를 구현하여 처리해야한다. 일반 리스트에 append하고 최소값을 구하는 방법으로는 시간 복잡도가 굉장히 오래걸리기 때문. 우선 순위 큐는 힙으로 구현할 수 있다. 힙에 추가 및 삭제되며 저장될 때는 이진 트리를 따르기 때문에 빠르게 최소값을 출력할 수 있다. 다..
#285 백준 파이썬 [11403] 경로 찾기 - 플로이드 와샬 https://www.acmicpc.net/problem/11403 SOLUTION 플로이드-워셜 문제로 해결하였다. https://claude-u.tistory.com/334 해당 문제 및 풀이와 같다. PYTHON CODE #입력 N = int(input()) graph = [] for _ in range(N): graph.append(list(map(int, input().split()))) #플로이드-워셜 알고리즘 for k in range(N): #경로 for문이 가장 상위 단계여야 누락되지 않는다 for i in range(N): for j in range(N): if graph[i][j] == 1 or (graph[i][k] == 1 and graph[k][j] == 1): graph[i][..
#204 백준 파이썬 [2133] 타일 채우기 - 점화식 https://www.acmicpc.net/problem/2133 #Solution 규칙을 찾는 데 꽤 애먹은 도형이다. 1) 홀수 번째는 만들 수 없다. 따라서 0 2) 짝수 번째는 이전에 만든 것들에 영향을 받는다. 3) 2,4,6,8,10... 이 순서로 간다고 했을 때, n = (n-2) * 3 + (n ~ n-4) * 2 + 2 도형을 그리다보면 최댓값일 때 자기 자신만이 가질 수 있는 도형이 무엇인지 알 수 있다. 대충 양옆에 하나만 서있고 나머지 다 누워있는 도형 def tiles(n): answer = [0] * (n + 1) if n % 2 == 1: return 0 for i in range(2, n + 1, 2): if i == 2: answer[i] = 3 else: for j in..
#192 백준 파이썬 [2752] 세수정렬 https://www.acmicpc.net/problem/2752 #Solution numbers = list(map(int, input().split())) numbers.sort() print(numbers[0], numbers[1], numbers[2])
#187 백준 파이썬 [10103] 주사위 게임 https://www.acmicpc.net/problem/10103 #Solution n = int(input()) x = y = 100 for _ in range(n): a, b = map(int, input().split()) if a > b: y -= a elif a < b: x -= b print(x, y, sep = "\n")
#186 백준 파이썬 [10162] 전자레인지 https://www.acmicpc.net/problem/10162 #Solution T = int(input()) if T % 10 != 0: print(-1) else: A = B = C = 0 A = T // 300 B = (T % 300) // 60 C = (T % 300) % 60 // 10 print(A, B, C)
#179 백준 파이썬 [7567] 그릇 https://www.acmicpc.net/problem/7567 #Solution dish = list(str(input())) answer = 0 for i in range(len(dish)): if i == 0: answer += 10 elif dish[i] == dish[i-1]: answer += 5 else: answer += 10 print(answer)
#177 백준 파이썬 [2754] 학점계산 https://www.acmicpc.net/problem/2754 #Solution GPA = {'A+': 4.3, 'A0': 4.0, 'A-': 3.7, 'B+': 3.3, 'B0': 3.0, 'B-': 2.7, 'C+': 2.3, 'C0': 2.0, 'C-': 1.7, 'D+': 1.3, 'D0': 1.0, 'D-': 0.7, 'F': 0.0} print(GPA[str(input())])