[문제 요약]
중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 프린터는 아래 방식으로 인쇄 작업을 수행합니다.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.
내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 위의 예에서 C는 1번째로, A는 3번째로 인쇄됩니다.
현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🎨 풀이
💡 전체 코드
def solution(priorities, location):
answer = 0
while (len(priorities) != 0):
# 가장 앞에 있는 문서가 중요도가 제일 높은 경우
if priorities[0] == max(priorities):
del priorities[0]
answer += 1
# 프린트된게 그 문서라면!
if location == 0 :
break
else :
location -= 1
# 뒤에 중요도가 높은 문서가 있다면
else:
priorities.append(priorities[0])
priorities = priorities[1:len(priorities)]
# 뒤로 옮겨진 게 그 문서였다면!
if location == 0:
location = len(priorities) - 1
else :
location -= 1
return answer
> 핵심 : 중요도가 높다면 인쇄. 그 때 location이 0인지 확인해주기!
🍦 코드 설명 (실행 순서대로 나열)
#solution
while (len(priorities) != 0):
# 가장 앞에 있는 문서가 중요도가 제일 높은 경우
if priorities[0] == max(priorities):
del priorities[0]
answer += 1
# 프린트된게 그 문서라면!
if location == 0 :
break
else :
location -= 1
1. while 문을 실행한다. (priorities에 숫자 하나라도 들어있을 때까지)
# 가장 앞에 있는 문서를 인쇄할 수 있는 경우
2. 만약 맨 앞의 문서가 중요도가 제일 높다면, 리스트에서 그 숫자를 제거한다. 문서 하나가 인쇄되었다는 뜻이기 때문에 answer에 += 1을 해준다.3. 만약 location이 0이라면, while문을 종료한다. - 해당 문서가 인쇄되었다는 뜻이기 때문!
4. 만약 location이 0이 아니라면, location -= 1을 해준다.
- 해당 문서는 아니지만 그래도 앞에서 하나가 제거되었기 때문에 -1을 해주는 것이다.
# 뒤에 중요도가 높은 문서가 있다면
else:
priorities.append(priorities[0])
priorities = priorities[1:len(priorities)]
# 뒤로 옮겨진 게 그 문서였다면!
if location == 0:
location = len(priorities) - 1
else :
location -= 1
return answer
# 가장 앞에 있는 문서를 인쇄할 수 없는 경우
5. 해당 문서를 맨 끝으로 옮긴다.
- append를 끝에 해준 후, 리스트 인덱스 1~len(priorities)까지 slice 하는 방법을 택했다.
6. 만약 뒤로 옮겨진 게 우리가 요청한 문서라면 location도 len(priorities) - 1 로 바꿔준다.
- 인덱스 기준이라서 len(priorities)에 -1을 해준 것이다.
7. 만약 그 문서가 옮겨진 게 아니라면, location에 -1을 해준다.
8. while문을 끝낸 후 answer을 return 해준다!

끝~
⭐ 느낀점
> 이거 location을 어떻게 활용해야할지 감을 못잡았는데, 생각보다 쉽게 풀린 것 같다. 왜 이 방법을 생각 못하고 있었지??? 허허,.. 종종 단순하게 생각하기도 해야겠구먼
'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 입문] 배열 두 배 만들기 (파이썬) (0) | 2022.09.29 |
---|---|
[프로그래머스 / Level 2] 행렬의 곱셈 (파이썬) (0) | 2022.09.28 |
[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬) (0) | 2022.09.24 |
[프로그래머스 / Level 2] 카펫 (파이썬) (0) | 2022.09.23 |
[프로그래머스 / Level 2] 기능개발 (파이썬) (0) | 2022.09.22 |