[python] 프로그래머스 '프린터' 문제 속 3가지 문법( +자료구조)

EUNCHAE KIM·2022년 10월 26일

문제를 보며 (0,A) (1,B) (2,C) 이런식으로
인덱스를 부여받은 튜플형식의 데이터를 어떻게 만들어내야 할지 고민했는데
(클래스를 만들어서 해야하나 이러며....ㅎ)
파이썬에 그런 내장 함수도 있었다. 역시 갓파이썬,,

프로그래머스 스택/큐 - 프린터 문제 링크

# most 1 

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
# most 2 : deque 사용 

from collections import deque
def solution(priorities, location):
    index_list = deque([i for i in range(len(priorities))])
    maximum = max(priorities)
    answer = 0
    while True:
        index = index_list.popleft()
        if priorities[index] < maximum:
            index_list.append(index)
        else:
            answer += 1
            priorities[index] = 0
            maximum = max(priorities)
            if index == location:
                return answer

1.enumerate()

인덱스와 원소로 이루어진 튜플(tuple)을 만들어준다.

>>> for entry in enumerate(['A', 'B', 'C']):
...     print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
>>> for i, letter in enumerate(['A', 'B', 'C']):
...     print(i, letter)
...
0 A
1 B
2 C

더 자세한 enumerate() 원리는 여기 링크로

2. any() : 하나라도 True인게 있으면 True

argument로 iterable한 객체를 받아 이 객체를 돌면서
조건을 검사해 True/False 답을 반환한다

cur = 3
temp = [1,3,6,2]
if any(cur<num for num in temp):
	print("There exist number that is larger than 3")

파이썬 any(), all() 함수

3. 리스트 요소 끄집어내기 (pop)

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

점프 투 파이썬 / 02장 파이썬 프로그래밍의 기초, 자료형 / 02-3 리스트

4. Deque ( 데크 ) : 양방향 큐

앞, 뒤 양쪽 방향에서 엘리먼트(element)를 추가하거나 제거할 수 있다.

from collections import deque

deq = deque()

여러 메서드들이 있는데 ,
이 문제에서는 아래 두가지를 사용했다.
deque.appendleft(item) : item을 데크의 왼쪽 끝에 삽입
deque.pop() : 데크의 오른쪽 끝 엘리먼트를 가져오는 동시에 데크에서 삭제
데크(deque) 언제, 왜 사용해야 하는가?

profile
Try Everything

0개의 댓글