본문 바로가기

알고리즘

(94)
파이썬 | 백준 | 16918 | 봄버맨 solution 3 : 폭탄이 설치되어 있지 않은 모든 칸에 폭탄을 설치한다 → make_bombs() 4 : 1초가 지난 후에 3초 전에 설치된 폭탄이 모두 폭발한다 → explode() # 16918, 봄버맨 import sys from collections import deque def loc_bombs(): # 폭탄 위치 찾아 bombs deque에 저장 for i in range(R): for j in range(C): if board[i][j] == 'O': bombs.append((i, j)) def make_bombs(): # 모든 자리에 폭탄 설치 for i in range(R): for j in range(C): if board[i][j] == '.': board[i][j] = 'O' ..
파이썬 | 백준 | 10282 | 해킹 solution : bfs 시간 초과 # 10282, 해킹 import sys from collections import deque t = int(sys.stdin.readline()) while t: # 컴퓨터 개수, 의존성 개수, 해킹당한 컴퓨터 번호 n, d, c = map(int, sys.stdin.readline().split()) network = [[] for _ in range(n+1)] visited = [1001]*(n+1) for _ in range(d): a, b, s = map(int, sys.stdin.readline().split()) network[b].append((a, s)) q = deque() q.append(c) visited[c] = 0 while q: now = ..
파이썬 | 백준 | 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..