728x90

 

- 오늘의 학습 키워드 : 큐

- 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

- 공부한 내용 본인의 언어로 정리하기

from collections import deque

def solution(priorities, location): #priorities : 우선순위, location : 얘가들어왔을때
    answer = 0
    #큐는 선입선출 먼저들어온게 먼저나가요
    #deque라는 개념 :(우선순위,인덱스)
    queue = deque([(priority, idx) for idx, priority in enumerate(priorities)])
    
    #while문쓰기(for보다 더 적합)
    while queue:
        #맨왼쪽을 삭제 후 반환
        current = queue.popleft()
        #any() 하나라도 True이면 True:
        #all() 모두 T이면 T
        # 현재보다 더 우선순위 큰게 있는지 확인
        if any(current[0] < q[0] for q in queue):
            #있으면 뒤로 추가
            queue.append(current)
        else: #우선순위 없다면
            answer += 1
            #만약 현재가 목표 로케이트이면, 0:우선순위 1:인덱스 튜플이라
            if current[1] == location:
                return answer
    
    return answer

 

- 회고록:

* 큐는 선입선출(FIFO)의 구조를 가진다.

* 큐를 풀떄는 deque를 사용하면 편리하다. 참고로 deque를 사용하려면 import collections from deque를 선언해야한다.

deque는 스택에도 쓰이고, queue에도 쓰이는데 출입구를 양쪽으로 갖고있다.

여기서 쓰인 메소드는

1) appendleft() : 왼쪽에 삽입

2) pop : 오른쪽 배출

3) append() : 삽입

4) popleft() : 왼쪽에 있는거 삭제 후 반환(리턴)

* 우선순위 고려할때 

deque([(priority, idx) for idx, priority in enumerate(priorities)]) 를 사용했는데, 

(우선순위, 인덱스) 형태로 저장하는 튜플이다.

print(queue) # deque([(2, 0), (1, 1), (3, 2), (2, 3)]) 이런식으로 저장된다.

------(튜플의 정의는 이 링크로)-------

https://wikidocs.net/15

 

02-4 튜플 자료형

튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다. * 리스트는 [], 튜플은 ()으로 둘러싼다. * 리스트는 요솟값의 생성, …

wikidocs.net

-------------------------------------

 

* while or for:

어떤 조건문을 사용해야되는지 고민했는데 반복의 횟수가 정해져있지 않기때문에, 이경우에는 while을 사용하는게

더 바람직했다.

* if current[1] == location: return answer

왜 current[1]을 한걸까?에 대한 답은

아까튜플로 저장했던것을 기억해보면 (우선순위, 인덱스)의 형태로 저장했는데, [0]은 우선순위이고, [1]은 인덱스인거다.

근데 우리는 인덱스를 기준으로 로케이션이랑(위치) 같다면, 그게 우리가 찾는 문서라는거니까

저런 조건문을 넣어주었다.

 

 

오늘 문제 어려운데 왜 재밌지 미쳐가나?

728x90

+ Recent posts