목록백준 문제 풀이 (154)
황소개발자
import sys input = sys.stdin.readline n, m = map(int, input().split()) not_hear = [] not_see = [] for i in range(n): not_hear.append(input().strip()) for i in range(m): not_see.append(input().strip()) duplicated = set(not_hear) & set(not_see) print(len(duplicated)) duplicated = sorted(list(duplicated)) for i in duplicated: print(i) 뭐 알고리즘 있을까 햇는데, 그냥 집합으로 구현. 그리고 strip 생활화^^
import sys import heapq input = sys.stdin.readline n = int(input().strip()) q = [] for i in range(n): num = int(input().strip()) if num == 0: if q: print(heapq.heappop(q)) else: print(0) else: heapq.heappush(q, num)
파이썬의 heapq 는 기본이 minheap 입니다. 이걸 어떻게 maxheap 으로 이용할 것이냐? import sys import heapq input = sys.stdin.readline n = int(input().strip()) q = [] for i in range(n): num = int(input().strip()) if num == 0: if q: print(-heapq.heappop(q)) else: print(0) else: heapq.heappush(q, -num) -num 으로 해서 음수로 바꿔서 넣어주고 꺼낼때 - 붙여서 꺼내주면 됩니다.
비트연산에 안익숙한가? 비트연산을 검색하고 더 공부해라..!! import sys input = sys.stdin.readline h, w = map(int, input().split()) mat = [] for i in range(h): mat.append(input()) ans = 0 for b in range(1
정말 대단하신 분이다.. import sys input = sys.stdin.readline w, h = map(int, input().split()) mat = [] for i in range(h): mat.append(input()) mirror = [[] for _ in range(h)] C = [] for i in range(h): for j in range(w): if mat[i][j] == 'C': C.append([i, j]) if mat[i][j] != '*': mirror[i].append(-1) else: mirror[i].append(mat[i][j]) dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] def bfs(start_y, start_x): q = [] q...
간단간단하다구 원래 기본 BFS는 큐 한개로 구현이 되지. 이거는 시간을 고려해줘야 하기 때문에, (매초마다 1칸씩 없어지는) 큐 두개로 시간과 동기화 시켜줘야 해 ^^ 아래는 흔히 틀리는 반례야 (djm03178 님이 등록해주셨어) 23 5 10000000100010010000000 00011111001111111100100 n, k = map(int, input().split()) lst1 = input() lst2 = input() lst = [lst1, lst2] visited = [[0 for i in range(n)] for _ in range(2)] visited[0][0] = 1 def bfs(): q = [] q2 = [] q2.append([0, 0]) remove = 0 while q..
5 1000 입력했을 때, 11 2 가 나오는가? 안나온다면 중복을 해결하지 못한것이여. 그리고 n == k 일 때, 0 1 이 나와야혀. 코드는 다음과 같네 dp2 로 중복 개수를 헤아렷네. n, k = map(int, input().split()) if n == k: print(0) print(1) exit() dp = [-1] * 150001 dp2 = [1] * 150001 flag = False dist = -1 count = 0 dp[n] = 0 q = [n] q2 = [] while q: now = q.pop(0) if now + 1 = 0: if dp[now - 1] == dp[now] + 1: dp2[now - 1] += dp2[now] elif dp[now - 1] == -1: if n..
올바른 괄호가 되기위해서는 ( * * * * ) * * * * * * 이런식. 이 때, 첫번째 괄호를 1번째, 두번째 괄호를 k 번째라고하자. 그러면 괄호안에 쌓여진 공간의 개수는 k - 2 이고, 오른쪽에 공간의 개수는 n - k 개이다. dp[n] = dp[k - 2] * dp[n - k] (k = 2 ~ n) 이다. import sys input = sys.stdin.readline t = int(input()) lst = [] for _ in range(t): lst.append(int(input())) dp = [0] * 5001 dp[0] = 1 for i in range(2, 5001, 2): for j in range(2, i + 1, 2): dp[i] += (dp[j - 2] * dp[i..