hye-log

[프로그래머스]프린터(Python) 본문

CodingTest/Programmers

[프로그래머스]프린터(Python)

iihye_ 2022. 11. 19. 17:35

0. 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제 설명

1) 인쇄 대기목록의 가장 앞에 있는 문서부터 꺼내기

2) 나머지 인쇄 대기목록에서 꺼낸 문서보다 중요도가 높은 문서가 있으면 꺼낸 문서를 대기목록의 맨 끝으로 옮기기

3) 꺼낸 문서보다 중요도가 높은 문서가 없으면 꺼낸 문서를 인쇄하기

 

2. 입출력

# input
priorities = [2, 1, 3, 2]
location = 2

# output
return = 1

 

3. 코드

def solution(priorities, location):
    answer = 0

    urgent = max(priorities)                        # 가장 높은 우선순위

    while True:
        temp = priorities.pop(0)                    # 대기목록에서 하나 꺼내기
        
        if urgent == temp:                          # 하나 꺼낸 요소가 가장 높은 우선순위이면
            answer += 1                             # 프린트
            if location == 0:                       # 위치가 0이면,
                break                               # 반복문 중단
            else:                                   # 위치가 0이 아니면,
                location -= 1                       # 하나 프린트 했으므로 1 감소
            urgent = max(priorities)                # 가장 높은 우선순위 구하기

        else:                                       # 하나 꺼낸 요소가 가장 높은 우선순위가 아니면
            priorities.append(temp)                 # 대기목록의 제일 마지막에 넣기
            if location == 0:                       # 위치가 0이면,
                location = len(priorities) - 1      # 가장 마지막 위치로 변경
            else:                                   # 위치가 0이 아니면,
                location -= 1                       # 순서가 하나씩 당겨졌으므로 1 감소 
                
    return answer

 

실행 결과

 

4. 회고

이 문제는 대기목록의 가장 앞에 있는 문서와 우선순위를 고려하여 프린트의 순서를 정하는 문제이다.

먼저 가장 높은 우선순위를 구한다.

urgent = max(priorities)                        # 가장 높은 우선순위

다음으로 대기목록에서 문서를 하나 꺼낸다.

temp = priorities.pop(0)                    # 대기목록에서 하나 꺼내기

만약 대기목록에서 꺼낸 문서가 가장 높은 우선순위에 해당한다면 프린트를 하면 된다.

이때, 구하고자 하는 문서의 위치(location)이 0이면 현재 프린트하는 문서이므로 반복문을 종료한다. 구하고자 하는 문서의 위치(location)가 0이 아니라면 하나를 인쇄했으므로 문서의 위치(location)을 1 감소한다. 가장 높은 우선순위가 인쇄되었으니 새로운 높은 우선순위를 max 함수로 구한다.

if urgent == temp:                          # 하나 꺼낸 요소가 가장 높은 우선순위이면
    answer += 1                             # 프린트
    if location == 0:                       # 위치가 0이면,
        break                               # 반복문 중단
    else:                                   # 위치가 0이 아니면,
        location -= 1                       # 하나 프린트 했으므로 1 감소
    urgent = max(priorities)                # 가장 높은 우선순위 구하기

만약 대기목록에서 꺼낸 문서가 가장 높은 우선순위가 아니라면, 꺼낸 문서를 대기목록의 제일 마지막에 넣는다.

이때, 구하고자 하는 문서의 위치(location)이 0이었다면 대기목록의 제일 마지막에 넣은 문서이므로, 대기목록(priorities)의 가장 마지막 위치로 변경한다. 구하고자 하는 문서의 위치(location)이 0이 아니라면 순서가 하나씩 당겨졌으므로 1 감소한다.

else:                                       # 하나 꺼낸 요소가 가장 높은 우선순위가 아니면
    priorities.append(temp)                 # 대기목록의 제일 마지막에 넣기
    if location == 0:                       # 위치가 0이면,
        location = len(priorities) - 1      # 가장 마지막 위치로 변경
    else:                                   # 위치가 0이 아니면,
        location -= 1                       # 순서가 하나씩 당겨졌으므로 1 감소

 

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Programmers/printer_print.py

 

GitHub - iihye/Algorithm: Solving algorithm problems

Solving algorithm problems. Contribute to iihye/Algorithm development by creating an account on GitHub.

github.com

 

728x90
Comments