Development

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

코딩테스트/Python

[프로그래머스]프린터

yo~og 2021. 7. 27. 01:12
반응형

스택, 큐부분 2단계 문제 프린터다! 으으 ㅠㅠ 어렵다.. 먼저 내가 푼 코드이다!

def solution(priorities, location):
    
    cnt=0

    while True:
        if priorities[0] < max(priorities):
            if location == 0:
                location = len(priorities) -1
            else:
                location-=1
            priorities.append(priorities.pop(0))
            
        else:
            if location == 0:
                return cnt+1
            else:
                cnt+=1
                location-=1
            priorities.pop(0)

먼저 priorities의 첫번째 원소와 priorities에서 제일 큰 원소를 비교한다. 만약 priorities[0]보다 큰 원소가 있을 때에는 가장 첫번째 원소를 제일 뒤로 보내줘야한다. 그에 맞게 location도 지정해주었다.

첫번째 원소보다 큰 원소가 없을 경우, location이 가장 앞이라면 cnt(작업 순서)를 return 해준다. 제일 앞이 아니면 가장 앞의 원소를 pop하고 location과 cnt를 맞게 설정해준다.

 

 

다른사람이 푼 것

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

먼저 enumerate를 사용하여 인덱스번호와 원소를 튜플형태로 만들어 반환한다. 튜플을 모아 리스트로 만들어서 queue변수에 넣는다. queue의 첫번째 튜플을 pop하고 이 튜플의 첫번째 원소와 queue의 첫번째 원소들을 비교하면서 any를 사용하여 하나라도 True가 있으면(queue가 더 큰게 있으면) 제일 끝에 cur을 붙힌다. 만약 없으면 location을 비교하여 답을 리턴한다.

 

 

 

enumerate


 - 반복문 사용시 몇번째 반복문인지 확인이 필요한데 이때 사용한다.

 - 인덱스 번호와 컬렉션의 원소를 tuple 형태로 반환한다.

 

a = [1,2,3,4,5,6]

for i in enumerate(a):
    print(i)

(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)

#####################

a = [1,2,3,4,5,6]

for i,v in enumerate(a):
    print("index : %d,value: %d"%(i,v))

index : 0,value: 1
index : 1,value: 2
index : 2,value: 3
index : 3,value: 4
index : 4,value: 5
index : 5,value: 6

####################

a = [1,2,3,4,5,6]
b = [(i,v) for (i,v) in enumerate(a)]
print(b)

[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]

 

 

all,any


all()

인자로 받은 모든 요소가 True이면 True를 반환한다.

하나라도 False가있으면 False를 반환한다.

 

any()

하나라도 True가 있으면 True를 반환한다.

모두 False여야 False를 반환한다.

 

 

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

반응형
Comments