본문 바로가기

백준

(10)
백준 - 11279 최대 힙 문제 설명 0이 들어오면 힙 속 최대값을 출력하고, 그 외의 입력은 힙에 값을 추가하는 문제 코드 구상 들어오는 숫자를 -로 만들고 최소 힙 구하듯 만든다. 코드 import heapq import sys n = int(sys.stdin.readline()) heap = [] for _ in range(n): x = int(sys.stdin.readline()) if(x==0): if len(heap)==0: print(0) else: result = heapq.heappop(heap) print(result[1]) else: heapq.heappush(heap,(-x,x))
백준 - 최소힙 1927 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 문제 설명 0이 나오면 힙속 가장 작은 값을 출력하고, 그외 입력을 받는다면 힙에 넣기 코드 구성 파이썬의 heapq를 이용하면 간편하게 구현가능 코드 #1927 최소힙 import heapq import sys n = int(sys.stdin.readline()) heap = [] for _ in range(n): x = int(sys.stdin.readline()) if(x..
백준 - 스택 수열 1874 https://www.acmicpc.net/problem/1874 문제 해석 위 예제처럼 n이 8로 주어졌다고 할때, 1~8를 pop과 push를 이용해 입력으로 들어온 값과 같은 순서로 정렬하면 되는 문제다. 이때 push는 +로, pop은 -로 출력한다. 위 예제처럼 4가 들어오면 빈 리스트에 1,2,3,4 까지 push를 이용해 리스트에 넣어주면 [1,2,3,4]가 된다. 여기서 4를 pop하면 [1,2,3]이 되고, 그 다음으로 입력받은 값은 3이므로 pop하면 [1,2]... 이런식으로 진행하면 된다. 다만 여기서 주의해야 하는 경우는 불가능한 경우인데, 아래 예제를 한번 보며 설명해보려 한다. 일단 1를 push 하고 pop 한다. 2도 push하고 pop 하면된다. 이 다음 5를 입력받았으므..
백준 - 카드2 2164 https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제설명 한 카드를 버리면 다음 카드를 맨 뒤로 넘기고를 반복해서 마지막으로 남는 카드를 고르면 되는 문제 코드구상 덱(deque)를 사용해서 맨 왼쪽 요소를 pop해주고 맨위 요소가 뒤로가도록 로테이션을 -1로 돌려준다 코드 from collections import deque deq = deque() a = int(input()) for i in range(1,a+1): deq.append(i..
백준 - 큐 10845 https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제 설명 첫 줄에 입력받은 값만큼 명령어를 입력받고 결과값을 출력하기 코드 구상 나와있는데로 기능 구현하기, 다만 input으로 받으면 시간초과남 코드 import sys import sys a = int(sys.stdin.readline()) qu = [] for i in range(a): b = list(sys.stdin.readline().split()) if (b[0]==..
백준 - AC 5430 https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제 설명 첫줄에 테스트 케이스를 입력받고 그 다음 줄엔 명령어, 숫자 리스트의 길이, 숫자 리스트 순으로 입력받는 식이다. 명령어에는 R과 D가 있는데, R은 리버스(뒤집기)이고 D는 가장 앞에 있는 수를 지우는 명령어다. 코드 구상 이 문제를 푸는 가장 중요한 요점은 시간이다. 불필요한 과정을 넣는 순간 시간초과가 뜬다. 파이썬은 deque를 이용해 풀어야 한다. deque는 popleft를 빠르게 할 수 있다는 장점이 있다. R이 연속으로 짝수번 ..
백준 - 제로 10773 https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 문제설명 - 0이 나오면 가장 최근에 쓴 숫자를 지우고 합을 구하기 코드구상 - 0이나오면 pop하고 아니면 리스트에 추가하기 코드 a = int(input()) c = [] for i in range(a): b = int(input()) if(b==0): c.pop() else: c.append(b) print(sum(c))
백준 - 괄호 9012 https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문제 설명 - 괄호가 온전히 존재하면 yes, 아니면 no 코드 구상 1. 입력받은 값 속 ()가 있는지 판단하고, 있다면 없에고 앞뒤를 붙여준다. 2. 만약 입력받은 값의 길이가 0이 되면 yes를 출력하고, ()가 있지 않다면 no를 출력한다. 코드 n = int(input()) #n입력받고 arr = [input() for _ in range(n)] #arr에 ..

반응형