<프로그래머스 코딩테스트>
문제 설명 > 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.![]
즉, Priorities 배열을 돌면서 , Location 값이 몇 번째 우선순위로 나올것인가 에 대한 문제이다. ex) location 2에 위치하는 배열은 3이므로 제일 높은 숫자이기에 return이 1 순위로 나타내진다.
코드
def solution(priorities, location):
# 1 .Q를 만든다
printer = [(i,p) for i,p in enumerate(priorities)]
turn = 0
while printer:
job = printer.pop(0)
#2. 나보다 중요한 job이 있으면 뒤에 넣는다
if any(job[1] < other_job[1] for other_job in printer):
printer.append(job)
else:
turn +=1
#3. 너가 제일 중요하다면 수행하고 location을 비교한다.
if job[0] == location:
break
return turn
print (solution([2,1,3,2],2))
문제설명
- priorites 배열을 2차원 튜플 형태로 만들어준다
[(i,p) for i,p in enumerate(priorities)] // (0,2),(1,1),(2,3),(3,2)
enumerate 에 대해 알고싶다- While Printer <=> Whilre True: 같은말임
- job = printer.pop(0) // (0,2)
- if any(job[1] < other_job[1] for other_job in printer):
// other_job = (1,1),(2,3),(3,2)
// job = (0.,2)
//other_job[1] = 1,3,2 // job [1] = 2
// any에 대입하면 2보다 큰수가 하나라도 있음으로 False를 반환
// printer.append(job) => printer 배열 뒤로 추가함 (1,3,2,2)
any에 대해서 알아보기
- turn +=1 // 후순위로 밀려났음으로 +1 추가
if job[0] == location: // 이렇게 for문을 돌면서 결국 location이 원하는 위치에 우선순위를 알 수 있다.
def solution(priorities, location):
answer = 0
while True:
max_num = max(priorities) #3
for i in range(len(priorities)): # 4
if max_num == priorities[i]: # 3 = 2
answer+=1
priorities[i] = 0
max_num = max(priorities)
if i == location:
return answer
<코드 설명>
위에 문제랑 비슷하다 하지만 다른 점