Algorithm/1일 1코테
[💕 프로그래머스 Python] 프린터
대인보우
2020. 10. 25. 18:50
반응형
프로그래머스 연습문제 2단계
🖨프린터🖨
문제 및 문제 설명
programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
내가 쓴 답
def solution(priorities, location):
p = priorities #편의를 위해 p로 재정의
answer = [] # 1차
words = [] # 2차
for i, v in enumerate(p): # 인덱스가 필요하기 때문에 index와 함께 값을 answer에 append
answer.append([i,v])
while answer:
paper = answer.pop(0) #answer의 첫번째 값을 꺼내서
if len(answer) == 0: # pop 했는데 0이면 밑에 for문이 안돌아가서 따로 append
words.append(paper)
for i in range(len(answer)):
if paper[1] < answer[i][1]: #만약 answer 안에 더 큰 값이 있으면
answer.append(paper) # 맨 뒤로 다시 append
break
elif i+1 == len(answer): # 아니면 끝까지 돌렸는데도 break가 안됐으면 words에 append
words.append(paper) # (더 큰 값이 없다는 뜻이므로)
for i in range(len(words)): # words에서 location 값을 찾아서 위치 return (인덱스 값보다 +1)
if words[i][0] == location:
return i+1
ㅎㅎ 코드 완전 더럽
다른사람 코드
def solution(priorities, location):
queue = [(i,p) for i,p in enumerate(priorities)] # 인덱스와 함께 append
answer = 0
while True:
cur = queue.pop(0) # 맨 처음 값을 뽑되
if any(cur[1] < q[1] for q in queue): # cur보다 더 큰 값이 하나라도 있으면
queue.append(cur) # 다시 append
else: # 아니면 없다는 뜻이므로
answer += 1 # answer에 하나 + (내가 찾는 값에 하나씩 가까워진다고 생각하면 됨)
if cur[0] == location:
return answer
* any 사용예시
any(letter == 't' for letter in 'monty')
def solution(p, l):
ans = 0
m = max(p)
while True:
v = p.pop(0)
if m == v:
ans += 1
if l == 0:
break
else:
l -= 1
m = max(p)
else:
p.append(v)
if l == 0:
l = len(p)-1
else:
l -= 1
return ans
반응형