본문 바로가기

분류 전체보기

(116)
파이썬 | 백준 | 1744 | 수 묶기 solution 1. 수가 양수인 경우, 음수인 경우를 나눈다. 양수 → 최대힙 음수 → 최소힙 2. 우선순위 큐 사용 # 1744, 수 묶기 import sys import heapq N = int(sys.stdin.readline()) positive = [] negative = [] zero = False for _ in range(N): num = int(sys.stdin.readline()) if num > 0: heapq.heappush(positive, (-num, num)) # 양수 elif num < 0: heapq.heappush(negative, num) # 음수 else: zero = True # 0이 있는지 res = 0 # 양수 flag = 0 tmp1, tmp2 = 0, 0 w..
파이썬 | 백준 | 3048 | 개미 solution 방향 다르면 교환 # 3048, 개미 import sys N1, N2 = map(int, sys.stdin.readline().split()) ants1 = list(sys.stdin.readline().rstrip()) ants2 = list(sys.stdin.readline().rstrip()) T = int(sys.stdin.readline()) dir = {}# 방향 저장 for ant in ants1: dir[ant] = 0 # 뒤로 이동 for ant in ants2: dir[ant] = 1 # 앞으로 이동 ants1.reverse() ants1.extend(ants2) for _ in range(T): i = 0 while i < len(ants1)-1: if dir[ants..
파이썬 | 백준 | 1939 | 중량제한 solution1 : 배열 이용 메모리 초과 (무턱대고 사용하지 말 것..) # 1939, 중량제한 import sys N, M = map(int, sys.stdin.readline().split()) bridges = [[0]*(N+1) for _ in range(N+1)] for _ in range(M): a, b, c = map(int, sys.stdin.readline().split()) bridges[a][b] = max(bridges[a][b], c) bridges[b][a] = max(bridges[b][a], c) in1, in2 = map(int, sys.stdin.readline().split()) print(bridges[in1][in2]) solution2 : 이분탐색 + BFS 1..
파이썬 | 백준 | 1931 | 회의실배정 | 런타임에러 solution 1. 시작 가능한 시간에 시작하는 모든 회의들 중 끝나는 시간이 가장 빠른 것부터 처리 (우선순위큐 이용) (1, 4)회의가 끝난 후 시작 가능한 회의는 (5, 7), (5, 9), (6, 10), (8, 11), (8, 12), (12, 14) 중 (5, 7)이 가장 빨리 끝남 2. (0, 6)은 4시에 회의가 끝나는데 시작이 0시이므로 삭제 (while문 이용해서 계속 pop) while heap and heap[0][1] < tmp[0] : heap에 원소가 없으면 heap[0][1] 접근 불가 heap and 가 먼저 와야 함 heap[0][1] < tmp[0] and heap : 안 됨. 원소가 있는지부터 확인해야 함 (런타임에러) # 1931, 회의실배정 import sys i..
파이썬 | 백준 | 16234 | 인구 이동 solution bfs 이용(Puyo Puyo랑 비슷하게 풀면 됨 li-fo.tistory.com/80) # 16234, 인구 이동 import sys from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y): q = deque() q.append((x, y)) visited[x][y] = 1 tmp = [[x, y]] while q: a, b = q.popleft() for i in range(4): nx = a + dx[i] ny = b + dy[i] if 0
파이썬 | 백준 | 1713 | 후보 추천하기 | defaultdict(int) solution 1. 우선순위 큐 이용 (추천 횟수, 몇 번째 추천인지, 후보 번호) --> 안 돼서 다시 해봐야함 # 1713, 후보 추천하기 import sys import heapq # 횟수, 오래, 학생 n = int(sys.stdin.readline()) k = int(sys.stdin.readline()) recommend = list(map(int, sys.stdin.readline().split())) heap = [] candidate = {} for i in range(len(recommend)): # 사진에 없는 사람 추천 받은 경우 if candidate.get(recommend[i]) is None: # 사진이 꽉차있으면 1) 횟수 비교 2) 최근에 추천받은지 비교 if len(c..
파이썬 | 백준 | 11559 | Puyo Puyo solution 1. 4개 이상 연결되어있는 경우 찾기 2. 4개 이상 연결된 뿌요의 좌표를 boom 배열에 저장해 한 번에 터트림 3. 4개 이상의 연결된 뿌요가 없을 때까지 1,2 반복 # 11559, Puyo Puyo import sys from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y, ch): visited[x][y] = 1 q = deque() tmp = [] # 좌표 임시 저장하는 배열 q.append((x, y)) tmp.append((x, y)) while q: a, b = q.popleft() for i in range(4): nx = a + dx[i] ny = b + dy[i] if 0
파이썬 | 백준 | 2217 | 로프 solution 1. 내림차순 2. 15, 10의 경우 1. 15로프를 이용해 15의 중량 들어올리는 경우 2. 15로프, 10로프를 이용해 20의 중량을 10/10으로 들어올리거나 # 2217, 로프 import sys import heapq n = int(sys.stdin.readline()) heap = [] for _ in range(n): w = int(sys.stdin.readline()) heapq.heappush(heap, (-w, w)) r = 1 max_ = 0 while heap: max_ = max(max_, r * heapq.heappop(heap)[1]) r += 1 print(max_) 문제 출처 www.acmicpc.net/problem/2217 2217번: 로프 N(1≤N≤..