300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 동적프로그래밍
- 순열
- 딥러닝
- 코딩 테스트
- linux
- nlp
- 백준
- kick start
- AI
- 코딩테스트
- 프로그래머스
- 프로그래밍
- CSS
- dp
- PYTHON
- 파이썬
- 그래프
- 킥스타트
- 네트워크
- 동적 프로그래밍
- 코딩
- 리눅스
- google coding competition
- 알고리즘
- 운영체제
- 브루트포스
- OS
- DFS
- BFS
- 구글 킥스타트
Archives
- Today
- Total
오뚝이개발자
이중우선순위큐 본문
728x90
300x250
문제설명
제한사항
-
operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다.
-
operations의 원소는 큐가 수행할 연산을 나타냅니다.
-
원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합니다.
-
-
빈 큐에 데이터를 삭제하라는 연산이 주어질 경우, 해당 연산은 무시합니다.
입출력 예
입출력 예에 대한 설명
16을 삽입 후 최댓값을 삭제합니다. 비어있으므로 [0,0]을 반환합니다.
7,5,-5를 삽입 후 최솟값을 삭제합니다. 최대값 7, 최소값 5를 반환합니다.
풀이
굳이 힙을 사용하지 않고도 풀 수 있다. 구현이 중심인 문제이기에 문제의 조건에 따라 if문을 적절히 사용하여 구현하면 된다.
def solution(operations):
answer = []
q = []
for op in operations:
instruction, number = op.split()[0],int(op.split()[1])
if instruction == "I":
q.append(number)
elif instruction == "D":
if len(q)==0:
continue
# 최댓값 삭제
if number == 1:
q = q[:-1]
# 최솟값 삭제
elif number == -1:
q = q[1:]
q.sort()
if len(q)==0:
answer = [0,0]
else:
answer.append(q[-1])
answer.append(q[0])
return answer
728x90
300x250
Comments