1. 기능개발
큐를 사용하면 충분히 해결할 수 있는 문제이다. 다른 사람의 코드를 보다보면, 극단적으로 짧은 코드가 많은 추천 수를 받는걸 확인할 수 있다.
너무 좋은 코드이지만 이해가 어려워 나는 아래와 같은 형태의 조금 더 직관적인 코드를 선호하는 편이다. (컴팩트하게 못짜서 그러는거 맞음ㅋㅋ)
내 코드
from collections import deque
def solution(progresses, speeds):
answer = []
progresses = deque(progresses)
speeds = deque(speeds)
while progresses:
result = 0
while len(progresses) > 0 and progresses[0] >= 100:
progresses.popleft()
speeds.popleft()
result += 1
if result > 0:
answer.append(result)
for i in range(len(progresses)):
progresses[i] += speeds[i]
return answer
2. 프린터
중요도를 기준으로 프린트를 진행했을 때 지정된 문서가 출력되는 순서를 구하면 된다.
이런 문제를 해결할 때에는 데이터의 구조를 바꾸는 편이다.
내 코드
from collections import deque
def solution(priorities, location):
answer = 0
printer = deque()
for p in range(len(priorities)):
if p == location:
printer.append([priorities[p],1])
else:
printer.append([priorities[p],0])
priorities = sorted(priorities, reverse=True)
print(printer, priorities)
while printer:
p, t = printer.popleft()
if p == priorities[answer]:
answer += 1
if t:
break
else:
printer.append([p,t])
return answer
que상에 저장할 때 1과 0을 함께 저장한다. 1이 저장된 데이터가 출력될 때까지 count를 해주면 된다.
다른 코드
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)]
answer = 0
while True:
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
return answer
논리 자체는 비슷하지만 훨씬 깔끔하다고 느낀 코드이다.
3. 다리를 지나는 트럭
집중력이 떨어져 문제 이해에 많은 시간이 소요됐다. 제대로 이해하지 못한 채 진행하면 엄청 버거워진다. 제발 집중좀 하자. (아침 일찍 일어나자마자 공부를 진행해야한다!)
내 코드
from collections import deque
def get_2D(l):
result = 0
for i in l:
result += i[0]
return result
def solution(bridge_length, weight, truck_weights):
answer = 0
on_bridge = deque() # (w,on)
truck_weights = deque(truck_weights)
answer += 1
on_bridge.append([truck_weights.popleft(), bridge_length])
while on_bridge:
answer += 1
if len(on_bridge) > 0:
# 시간 지연
for c in on_bridge:
c[1] -= 1
while len(on_bridge) > 0 and on_bridge[0][1] == 0:
on_bridge.popleft()
# print(on_bridge)
if len(truck_weights) > 0 and get_2D(on_bridge) + truck_weights[0] <= weight:
on_bridge.append([truck_weights.popleft(), bridge_length])
return answer
다른 문제들과 비슷하게 접근했다. 큐에 저장할 때 다리를 건너는 정도를 의미하는 정수를 추가로 저장한다. while문을 돌 때마다 필요한 변수들을 조절하고 조건을 만족할 때 pop하면 된다.
4. 주식 가격
쉬운 문제인데, 문제의 예시가 날 헷갈리게 했다.
[1,2,3,2,3] 일 경우에
1은 끝까지 가격이 떨어지지 않았다 -> 4 (1 이후의 숫자가 4개)
2는 끝까지 가격이 떨어지지 않았다 -> 3 (2 이후의 숫자가 3개)
3은 1초 뒤 가격이 떨어졌다 -> 1 ? 뒤에 크거나 같은 숫자 없는데?
이래서 조금 어려줬는데, 작은 숫자가 나올 때 1을 더해서 return했더니 통과했다.
내 코드
from collections import deque
def solution(prices):
answer = []
prices = deque(prices)
while prices:
n = prices.popleft()
result = 0
for p in prices:
if p >= n:
result += 1
else:
result += 1
break
answer.append(result)
return answer
깔끔했다.
다 풀긴 했는데 약간 이상한 부분은
분명 스택/큐 인데 큐 하나로 다 풀었다.
뭐지? 스택은 잘 안나오나?
'Algorithm > programmers.co.kr' 카테고리의 다른 글
프로그래머스 고득점 kit #DP : N으로 표현 (3) | 2024.10.23 |
---|---|
프로그래머스 고득점 kit 풀기 #DFS/BFS (0) | 2022.03.19 |
프로그래머스 고득점 kit 풀기 #정렬 (0) | 2022.03.13 |
프로그래머스 고득점 kit 풀기 #해시 (0) | 2022.03.12 |
프로그래머스 SQL 고득점 kit (0) | 2022.02.20 |