티스토리 뷰
1. 문제
programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린��
programmers.co.kr
2. 소스코드-1 ( Python3 )
|
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 |
소스코드-2 ( Python3 )
|
def solution(priorities, location): answer = 0 search, c = sorted(priorities, reverse=True), 0 while True: for i, priority in enumerate(priorities): s = search[c] if priority == s: c += 1 answer += 1 if i == location: break else: continue break return answer |
3. 공부
1) pair : (a, b)
2) enumerate

| 예제 코드 | 결과 화면 |
| list = ['a', 'b', 'c', 'd', 'e'] for element in enumerate(list): print(element) print() for index, element in enumerate(list): print (index, element) print() start = 10 for index, element in enumerate(list, start): print(index, element) |
![]() |
3) any함수 : iterable자료구조의 원소 중 하나의 원소라도 0이 아니면 true를 리턴하는 함수. 비어있거나 전부 0이어야 false를 리턴한다.

| 예제 코드 | 결과 화면 |
|
# ex1 list = ['a', 'b', 'c', 'd', 'e'] x = any(list) print(x) print()
# ex2 list = [0, 0, 0, 0, 0] x = any(list) print(x) print()
# ex3 (프린터 문제 소스코드 이용) priorities = [1, 1, 9, 1, 1, 1] queue = [(i,p) for i,p in enumerate(priorities)] cur = queue.pop(0) if any(cur[1] < q[1] for q in queue): print("현재 원소가 최고 우선순위가 아님") else: print("현재 원소가 최고 우선순위가 맞음") print() |
![]() |
4) 정렬하는 방법
(1) list.sort() 메소드

stable sort이다. 같은 key값을 가진 원소가 여러 개일 때, 그 원소들끼리의 순서가 유지되는 정렬이다.
in-place sort를 한다. 정렬된 리스트를 return하지 않고 원본 리스트를 수정한다. 따라서 추가공간이 필요하지 않기 때문에 크기가 큰 sequence를 정렬할 때 좋다.
만약 원본 리스트가 필요하지 않다면, 아래 sorted()함수보다 약간 더 효율적이다.
(2) sorted() 함수

원본 리스트가 필요한 경우에 사용하면 좋다. 정렬된 리스트를 리턴하기 때문.
4. 고찰
1) 소스코드-1 알고리즘 해석
| queue에 index와 priority의 pair를 만들었다. answer는 프린트한 문서 개수를 세는 변수. while loop를 돌리면서 현재 queue의 맨 앞의 원소를 pop한다. 현재 원소의 priority보다 queue안의 다른 원소의 priority값이 높은 경우가 있는지 확인해서 있으면 -> queue의 맨 뒤에 현재 원소를 다시 추가한다. 없으면 -> 프린트한다. 현재 문서의 index가 location과 같은지 확인하여 같다면 answer를 리턴한다. |
2) 소스코드-2 알고리즘 해석
| 마찬가지로 answer는 프린트한 문서 개수를 세는 변수. priorities 리스트를 정렬하여 search에 저장하였고, c에 0을 저장한다. (c번째 프린트=c번째 높은 우선순위를 의미) while loop를 돌리면서 for loop를 돌리면서 i는 index, priority는 우선순위 s는 c번째 프린트할 우선순위 값을 저장. 현재 priority가 s와 같으면 (즉, 현재 문서의 우선순위 == 현재 프린트할 우선순위) -> 프린트한다. c와 answer 값을 +1하고 현재 문서의 index가 location과 같은지 확인하여 같다면 answer를 리턴한다. 아니면 -> continue ## 내 생각) else: continue를 한 칸 앞으로 잘못 쓴 듯 하다. 원래는 if priority==s:에 대응하는 else인 것 같다. else문이 없어도 코드가 돌아가기 때문에 문제가 되지 않은 것 같다. |
'프로그래밍 > 코드리뷰' 카테고리의 다른 글
| [코드리뷰]프로그래머스_카펫 (0) | 2020.10.30 |
|---|---|
| [코드리뷰] 프로그래머스_더 맵게 (0) | 2020.10.03 |
| [코드리뷰]프로그래머스_다리를 건너는 트럭 (0) | 2020.10.03 |
| [코드리뷰]프로그래머스_ 주식가격 (0) | 2020.09.28 |
| [코드리뷰] 프로그래머스_124나라의 숫자 (0) | 2020.09.24 |
- Total
- Today
- Yesterday
- 윈도우 복구
- vue/cli
- Ubuntu16.04
- Publisher
- 포트인식문제
- python3
- Mount
- Ubuntu20.04
- 프로그래머스
- HC-SR04
- 백준알고리즘
- 초음파센서
- 코드리뷰
- VMware
- subscriber
- Python
- 아두이노 IDE
- C++
- VirtualBox
- roslaunch
- 원격 통신
- filesystem
- set backspace
- 8자주행
- umount
- sensehat
- 리눅스
- 우분투
- ROS
- 윈도우
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |


