알고리즘/백준
-
[백준] 1655번 가운데를 말해요 (파이썬)
1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 코드 import heapq import sys left, right = [], [] n = int(input()) for _ in range(n): x = int(sys.stdin.readline()) if len(left) == len(right): heapq.heappush(left, (-x, x)) else: heapq.heappush(right, (x, x)) if right and left[0][1] > right[0][1]: left..
-
[백준] 11286번 절댓값 힙 (파이썬)
11286번: 절댓값 힙 첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 코드 import heapq import sys n = int(input()) queue = [] for _ in range(n): x = int(sys.stdin.readline()) if x == 0: if not queue: print(0) else: print(heapq.heappop(queue)[1]) else: heapq.heappush(queue, (abs(x),x))
-
[백준] 1927번 최소 힙 (파이썬)
1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 코드 import heapq import sys n = int(input()) queue = [] for _ in range(n): x = int(sys.stdin.readline()) if x == 0: if not queue: print(0) else: print(heapq.heappop(queue)) else: heapq.heappush(queue, x)
-
[백준] 11279번 최대 힙 (파이썬)
11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net 코드 import heapq import sys n = int(input()) queue = [] for _ in range(n): x = int(sys.stdin.readline()) if x == 0: if not queue: print(0) else: print(heapq.heappop(queue)[1]) else: heapq.heappush(queue, (-x, x))
-
[백준] 5430번 AC (파이썬)
5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 코드 from sys import stdin, stdout def AC(com, li): left = True if len(li) < com.count('D'): return 'error\n' for c in com: if c == 'R': left = not left elif c == 'D': p = 0 if left else -1 if li: li.pop(p) else: return 'error\n' if li: if left: return '[' + ','.join(li) + ']\n' else: return '..
-
[백준] 1021번 회전하는 큐 (파이썬)
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 코드 n, m = map(int, input().split()) want_list = list(map(int, input().split())) num_list = [i+1 for i in range(n)] cnt = 0 answer = [] for i in range(m): if num_list.index(want_list[i]) >= len(num_list)/2: while num_list[0] != want_list[i]: x= num_list.pop()..
-
[백준] 1021번 회전하는 큐 (파이썬)
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 코드 n, m = map(int, input().split()) want_list = list(map(int, input().split())) num_list = [i+1 for i in range(n)] cnt = 0 answer = [] for i in range(m): if num_list.index(want_list[i]) >= len(num_list)/2: while num_list[0] != want_list[i]: x= num_list.pop()..
-
[백준] 10866번 덱 (파이썬)
10866번: 덱 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 코드 import sys class Deque: def __init__(self): self.arr = list() def push_front(self,x): self.arr.insert(0,x) def push_back(self,x): self.arr.append(x) def pop_front(self): if self.empty(): return -1 else: return self.arr.pop(0) def pop_back(self): if ..