프로그래머스 프린터 <Python>

푸른하늘·2022년 3월 7일
0
post-thumbnail

<프로그래머스 코딩테스트>

프린터

문제 설명 > 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
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))

문제설명

  1. priorites 배열을 2차원 튜플 형태로 만들어준다
    [(i,p) for i,p in enumerate(priorities)] // (0,2),(1,1),(2,3),(3,2)
    enumerate 에 대해 알고싶다

  2. While Printer <=> Whilre True: 같은말임

  3. job = printer.pop(0) // (0,2)

  4. 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에 대해서 알아보기

  5. 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

<코드 설명>
위에 문제랑 비슷하다 하지만 다른 점

  • 바로 max 값을 구해서 priorities[i]을 사용하여 location 값을 찾아준다
  • 그리고 max값이 나오면 0으로 초기화 해서 max 값이 계속 바뀌도록 해준다.
  • max 값이 0으로 초기화 될 때마다 answer 에 +=1 을 해준다.
profile
Developer-Android-CK

0개의 댓글