티스토리 뷰
<풀이>
처음에 큐를 이용한 방법이 아니라 다른 방법을 썼다가 피똥쌌다.
쉬운 문제를 괜히 어렵게 푸는건 방법이 아닌 것 같다.
지금은 내가 알고 있는 방법 중에 그래도 금방 생각나는 방법으로 풀고 효율성 문제에 맞딱드렸을 때 다시 효율성을 고민하도록 하자.
<나의 풀이>
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
32
33
34
35
36
37
38
39
40
41
42
|
from collections import deque
def solution(priorities, location):
# 우선순위와 index를 담은 리스트
priority_Q = deque([(priorities[p], p) for p in range(len(priorities))])
# 현재 가장 높은 우선순위 값
cur_max = -1
# 출력해야 할 우선순위 목록
print_list = [0 for _ in range(10)]
for p in range(len(priorities)):
print_list[priorities[p]] += 1
if cur_max < priorities[p]:
cur_max = priorities[p]
answer = 0
while True:
# 가장 앞에 있는 출력물을 가져온다.
item = priority_Q.popleft()
# 이 출력물이 현재 가장 높은 우선순위를 가진 출력물이라면
if cur_max == item[0]:
# 출력해야할 목록에서 하나 제거해준다.
print_list[cur_max] -= 1
# 가장 높은 우선순위 출력물을 다 출력했다면
if print_list[cur_max] == 0:
# 다음 높은 우선 순위를 찾는다.
for i in range(cur_max - 1, 0, -1):
if print_list[i]:
cur_max = i
break
# 출력했으니 answer를 하나 증가시켜준다.
answer += 1
# 출력물이 내가 원하는 location의 출력물이었다면 while문을 멈춘다.
if item[1] == location:
break
else:
# 가장 높은 우선순위의 출력물이 아니라면 가장 뒤로 보낸다.
priority_Q.append(item)
return answer
|
cs |
<다른 사람 풀이>
any라는 메서드가 너무나 신박했다.. 이런 쉬운 방법이 있었을 줄이야..
any(x)는 반복 가능한(iterable) 자료형 x를 입력 인수로 받으며 이 x의 요소 중 하나라도 참이 있으면 True를 돌려주고, x가 모두 거짓일 때에만 False를 돌려준다. all(x)의 반대이다.
1
2
3
4
5
6
7
8
9
10
11
|
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
|
cs |
참고 자료
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 네트워크 (0) | 2020.12.14 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2020.12.14 |
[프로그래머스] 기능 개발 (0) | 2020.12.11 |
[프로그래머스] 다리를 지나는 트럭 (0) | 2020.12.11 |
[프로그래머스] 주식 가격 (0) | 2020.12.11 |
댓글