[7/8] 프린터

이경준·2021년 7월 8일
0

코테

목록 보기
65/140
post-custom-banner

레벨2 문제

내 코드

def solution(priorities, location):
    cnt = 0
    
    while True:
        key = priorities[location]

        # [0]이 max 값일때
        if (priorities[0] == max(priorities)):
            cnt += 1

            # location 값일때
            if (location == 0):
                break

            # 다른 값일때
            else:
                priorities.pop(0)
                location -= 1

        # 출력 안함
        else:

            # key가 맨 앞일때
            if (location == 0):
                location = len(priorities)-1
                priorities.append(priorities.pop(0))

            # key가 맨 앞이 아닐때
            else:
                priorities.append(priorities.pop(0))
                location -= 1
    
    return cnt

로직

  • location을 인덱스로 설정하여, 사이클마다 인덱스를 바꿔준다.

<while문>
1. 첫번째 값이 최대값이면, cnt에 1을 더해준다.
a) location 값이면, 반복문을 종료한다.
b) location 값이 아니면, 첫번째 값을 삭제하고 location에 1을 빼준다.

  1. 첫번째 값이 최대값이 아니면,
    a) location 값이 맨 앞에 있었다면, location을 맨 마지막 인덱스로 지정하고 맨 앞의 값을 맨 뒤로 이동시킨다.
    b) location 값이 맨 앞에 있지 않다면, location에 1을 빼주고 맨 앞의 값을 맨 뒤로 이동시킨다.

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

피드백

  • priorites를 2차원 리스트로 만들어 준다.
  • 상황에 따라 [0]과 [1] 값을 적절하게 사용한다.

배운 것

  • enumerate(arr) : 반복문에서 인덱스, 값을 튜플 형태로 반환
  • any() : iterable한 객체에서 하나라도 True라면 True
  • all() : iterable한 객체에서 모두 True여야 True 반환
profile
The Show Must Go On
post-custom-banner

0개의 댓글