문제 : https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
처음엔 엄청 쉬운 문제 인줄 알았는데.. 풀다보니 쉽지 않았다. 큐,스택을 이용하는건 알았는데
어떻게해서 풀지? 바로 떠오르지 않았다.
음 아무래도 사고력 문제인걸까? 규칙들을 글로 먼저 써보는 연습해야겠다.
- 프린터는 인쇄 요청이 들어온 순서대로 꺼낸다.
- 만약 프린터 작업목록에 우선순위가 큰 것이 1개라도 있으면 출력하지 않고 뒤로 보낸다.
- 현재 작업물부터 우선순위가 큰 작업물 순서가 될 때 까지 맨 뒤로 한개씩 보낸다.
- 우선순위가 젤 큰것이 큐의 제일 앞에 왔을 때 그것을 출력(POP)하고나서 몇번째 출력인지 answer에다가 +1해서 담아준다.
import Foundation
func solution(_ priorities:[Int], _ location:Int) -> Int {
var priority = priorities
var currentLocation = location
var answer = 0
while true {
if priority.first == priorities.max() {
answer += 1
if currentLocation == 0 {
break
} else {
currentLocation -= 1
}
} else {
priority.append(priority.removeFirst())
if currentLocation == 0 {
currentLocation = priorities.count - 1
} else {
currentLocation -= 1
}
}
}
return answer
}
var test1 = [2, 1,3, 2]
var location = 3
let result = 1
print(solution(test1, location))
비록 내가 푼 것은 아니지만 이렇게 규칙이 좀 많다 싶으면 위에 처럼 글로 써보고 시작해야겠다.
반응형
'알고리즘' 카테고리의 다른 글
[해쉬] 위장 - 프로그래머스 Swift (2) | 2021.07.14 |
---|---|
[해쉬] N-Repeated Element in Size 2N Array - LeetCode Swift (0) | 2021.07.14 |
[완전탐색] LeetCode contains-duplicate : 중복찾기 - 스위프트 (0) | 2021.07.09 |
[해쉬] 로마자 숫자로 변환하기 - 스위프트 (0) | 2021.07.07 |
[그리디] 백준 9237 문제 : 이장님 나무 심기 - 스위프트 (0) | 2021.07.06 |