728x90
반응형

Algorithm Problems 125

[백준][Python] 1916번 최소비용 구하기 - 그래프, 다익스트라

https://www.acmicpc.net/problem/1916 1916번: 최소비용 구하기 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 www.acmicpc.net Python import sys input = sys.stdin.readline v = int(input()) e = int(input()) graph = [[] for _ in range(v+1)] for _ in range(e): a, b, c = map(int, input().split()) graph[a].append((b, c)) start, end = ..

Algorithm Problems 2021.08.23

[백준][Python] 1753번 최단경로 - 그래프, 최소힙

https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. www.acmicpc.net Python import heapq import sys input = sys.stdin.readline v, e = map(int, input().split()) k = int(input()) graph = [[] for _ in range(v+1)] visit = [0] * (v+1) dist = ["INF"] * (v+1) for _ in range(e): a, b,..

Algorithm Problems 2021.08.23

[백준][Python] 1504번 특정한 최단경로 - 그래프, BFS

https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net Python from collections import deque import sys input = sys.stdin.readline n, e = map(int, input().split()) edges = [[] for _ in range(n+1)] for _ in range(e): a, b, c = map(int, input().split()) ed..

Algorithm Problems 2021.08.19

[백준][Python] 1931번 회의실 배정 - DP

https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net Python import sys input = sys.stdin.readline n = int(input()) arr = [list(map(int, input().split())) for _ in range(n)] arr = sorted(arr, key=lambda x: (x[1], x[0])) end = [0] for i in range(n): if arr[i][0] >= end[-1]: end.append(arr[i][1]) print(len(end)-1) 풀이 원소를 종료 시간대를 기준으로 정렬 sorted..

Algorithm Problems 2021.08.16

[Python] 원형 큐 사용 방법

비어있는 큐 생성 q = [0]*5 front, rear = 0, -1 삽입, 삭제 # 삽입 rear = (rear+1) q[rear] = 2 print(q[front:rear+1]) [2] # 삽입 - index out of range 방지 rear = (rear+1)%len(q) q[rear] = 10 print(q[front:rear+1]) [2, 10] # %len(q) 참고 -> 0~4 사이 인덱스 값이 반복되는 것을 확인할 수 있다 for i in range(0,12): print(i%len(q), end = " ") 0 1 2 3 4 0 1 2 3 4 0 1 # 삭제 front = (front+1)%len(q) print(q[front:rear+1]) # 처음에 추가한 2 삭제 [10] 길이..

Algorithm Problems 2021.08.05

[Python] heapq 라이브러리 살펴보기

사용 방법 heap = [] # 비어있는 heap 생성 heappush(heap, item) # heap 값을 추가 item = heappop(heap) # heap에서 가장 작은 값을 삭제 item = heap[0] # 삭제 없이 heap에서 가장 작은 값 보기 heapify(x) # 리스트를 heap으로 바꾸기. O(n) 소요 item = heapreplace(heap, item) # 가장 작은 값을 삭제 후 새로운 값을 추가 -> 크기 변화 X HeapQ의 특징 모든 K에 대하여 a[k] > 1 parent = heap[parentpos] if newitem < parent: heap[pos] = parent pos = parentpos continue break heap[pos] = newitem..

Algorithm Problems 2021.08.04

[백준][Python] 20301번 반전 요세푸스 - 원형 큐

https://www.acmicpc.net/problem/20301 20301번: 반전 요세푸스 첫째 줄에 정수 $N$, $K$, $M$이 주어진다. ($1 \leq N \leq 5\ 000$, $1 \leq K, M \leq N$) www.acmicpc.net Python n, k, m = map(int, input().split()) arr = [i for i in range(1, n+1)] front, rear = 0, n-1 kstep = 0 mstep = 0 go = 1 while n: # for i in range(front, front+n): # print(arr[i % len(arr)], end=" ") # print() kstep += 1 if kstep % k == 0: if go: p..

Algorithm Problems 2021.08.04

[백준][Python] 11723번 집합

https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net Python import sys input = sys.stdin.readline s = [0]*21 for _ in range(int(input())): cmd = input().split() if cmd[0][:2] == "al": s.clear() # s= ~~ 만 하면 새로운 것을 할당할 뿐 이전 것이 지워지지 않음 s = [1]*21 elif cmd[0][:2] == "em": del s[:] s = [0]*21 else: ..

Algorithm Problems 2021.08.04

[백준][Python] 5525번 IOIOI - 문자열

https://www.acmicpc.net/problem/5525 5525번: IOIOI N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇 www.acmicpc.net Python import sys input = sys.stdin.readline n = int(input()) m = int(input()) s = input().rstrip() ans = 0 length = 1 for i in range(s.find('I')+1, m): # I가 처음으로 나오는 곳부터 시작 if length =..

Algorithm Problems 2021.08.04
728x90
반응형