티스토리 뷰

 

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

<풀이>

처음에 큐를 이용한 방법이 아니라 다른 방법을 썼다가 피똥쌌다.

쉬운 문제를 괜히 어렵게 푸는건 방법이 아닌 것 같다.

지금은 내가 알고 있는 방법 중에 그래도 금방 생각나는 방법으로 풀고 효율성 문제에 맞딱드렸을 때 다시 효율성을 고민하도록 하자.

<나의 풀이>

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 - 10-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[1for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0== location:
                return answer
cs

 

참고 자료

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함