Just Fighting
[프로그래머스] 프린터 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
< 문제 설명 >
인쇄 대기목록에 가장 앞에 있는 문서가 우선순위가 가장 높으면 출력하고 그렇지 않으면 목록의 맨 뒤로 보낸다.
내가 요청한 문서가 몇번째로 출력되는지 알고 싶다.
문서의 중요도를 나타내는 배열이 priorities와 내가 요청한 문서의 위치인 location이 주어진다.
< 문제 이해 >
문서의 우선순위와 문서의 번호를 함께 생각해서 문제를 풀면 될 것이라고 생각했다.
그리고 pop()과 append()를 이용해 배열에서 값을 꺼내고 다시 넣는 것을 이용하면 될 것이라 생각했다.
< 문제 풀이 >
def solution(priorities, location):
answer = 0
loc = [i for i in range(len(priorities))] # 우선순위를 담은 배열
while len(priorities) > 0:
if priorities[0] == max(priorities): # 배열의 가장 큰 값이 가장 앞에 있는 문서라면
priorities.pop(0) # 문서 하나를 꺼냄
answer += 1 # 출력한 문서의 개수 카운트
if loc.pop(0) == location: break
else: # 가장 큰 값이 아니라면
loc.append(loc.pop(0)) # 맨뒤로 보낸다.
priorities.append(priorities.pop(0)) # 맨뒤로 보낸다.
return answer
< 풀이 개선 >
문제를 풀면서 두개의 배열에 똑같은 일을 두 번 하는 것이 뭔가 귀찮았다.
문제를 풀고 다른 사람들의 코드를 보았는데 더 좋은 방법이 있어서 그걸로 다시 풀어보았다.
def solution(priorities, location):
answer = 0
loc = [[i,priorities[i]] for i in range(len(priorities))] # 인덱스 추가
while len(loc) > 0:
if all(loc[0][1] >= l[1] for l in loc): # 배열의 첫 값이 가장 큰 값이면
answer += 1 # 카운트
if loc.pop(0)[0] == location : break # 내 문서이면 break
else: # 큰 값이 아니라면 맨 뒤로
loc.append(loc.pop(0))
return answer
인덱스를 추가해 새로운 배열을 만든다.
다른 사람들은 any를 사용했는데 나는 위의 코드와 비슷하게 가기 위해 all을 사용하였다.
코드가 훨씬 깔끔!
728x90
'Algorithm > 코딩테스트 연습' 카테고리의 다른 글
[백준] 분산처리 (0) | 2022.05.10 |
---|---|
[프로그래머스] 디스크 컨트롤러 (0) | 2022.03.25 |
[프로그래머스] 순위 (0) | 2022.03.20 |
[HackerRank] The Coin Change Problem (0) | 2022.03.18 |
[프로그래머스] 징검다리 (0) | 2022.03.11 |
Comments