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

EUNCHAE KIM·2022년 10월 26일
0

문제를 보며 (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개의 댓글