문제
https://programmers.co.kr/learn/courses/30/lessons/42587
처음 작성한 코드
def solution(priorities, location):
from collections import deque
together = deque([f'{chr(65+i)}:{priorities[i]}' for i in range(len(priorities))])
location = together[location]
finish = []
while len(finish)<=len(priorities):
if len(together):
a = together.popleft()
else:
finish.append(a)
break
for idx,j in enumerate(together):
if a.split(':')[1] < j.split(':')[1]:
together.append(a)
break
if idx==len(together)-1:
finish.append(a)
return finish.index(location)+1
1. 리스트 together에 'A':2, 'B':1 이런식으로 저장한다.
2. 프린트를 하면 리스트 finish에 넣는다.
3. 'A':2 이런식으로 저장했기 때문에 split(':')을 이용하여 비교를 해줘야한다.
4. 포문을 돌면서 마지막까지 돌았는데 나보다 큰 애가 안나오면 finish에 넣는다.
코드 리뷰 후
def solution(priorities, location):
from collections import deque
together = deque([(i,value) for i,value in enumerate(priorities)])
cnt = 0
while True:
p = together.popleft()
if any(p[1]<q[1] for q in together):
together.append(p)
else:
cnt +=1
if p[0]==location:
return cnt
1. 리스트 together에 (idx,value) 이런 식으로 저장한다. (0,2), (1,1) 이런 식..
2. while문 돌면서 진행하고 내가 원하는 location을 찾으면 반환하고 함수를 종료한다.
3. while문 안에서의 로직은 리스트에서 popleft()로 원소를 뽑고 나보다 큰 게 나오면 조용히 다시 넣고.. 아니면 출력하고(cnt+=1) 그 출력한 것이 내가 원했던 location이라면 출력한 순서인 cnt를 반환하고 종료한다.
깨달은 점
1. together에 'A':2 이런식으로 넣다보니 코드가 조금 지저분해졌다.. index를 활용하자!
2. 출력할 때마다 cnt를 +1 하고 그 때 location이랑 비교하는 건 사실 생각치도 못했다.. ㅜ.ㅜ
3. 너무 어렵게 생각했다..
4. collections의 deque 좋다.. popleft() 좋다
'Programmers' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (0) | 2021.01.05 |
---|---|
[프로그래머스] 다리를 지나는 트럭 (0) | 2021.01.05 |
카펫 (0) | 2021.01.03 |
소수 찾기 (0) | 2021.01.03 |
조이스틱 (0) | 2021.01.02 |