iOS/알고리즘
[프로그래머스] 프린터
kihun5393
2021. 10. 6. 20:21
- 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
난이도: Level 2
- 제출 답안
import Foundation
func solution(_ priorities:[Int], _ location:Int) -> Int {
var copyPriorities = priorities
var wait = Array(0 ... priorities.count-1)
let waitLocation = wait[location]
var indexPriorities = 0
while indexPriorities != copyPriorities.count-1 {
if copyPriorities[indexPriorities+1 ... copyPriorities.count-1].contains(where: { $0 > copyPriorities[indexPriorities] }) {
copyPriorities.append(copyPriorities.remove(at: indexPriorities))
wait.append(wait.remove(at: indexPriorities))
} else {
indexPriorities += 1
}
}
let paperSeq = wait.firstIndex { value in
value == waitLocation
}
return (paperSeq!+1)
}
- 풀이
priorities 인덱스를 체크해줄 값을 하나 초기화 해준다.(indexPriorities = 0)
그리고 대기문서 배열을 구하기 위해 priorities 크기 만큼의 배열을 하나 초기화 해준다.
var wait = Array(0 ... priorities.count-1)
priorities내부에 index 뒤부터 끝 인덱스까지의 값 중 index 값 보다 큰 값이 있다면,
priorities 의 해당 인덱스 값을 뒤로 옮겨주고 마찬가지로 대기문서(wait)의 해당 인덱스 값도 뒤로 옮겨준다.
큰 값이 없다면, 더 비교할 필요가 없기 때문에 index를 하나 증가해준다. 그렇게 마지막 요소까지 검사한다.
대기문서에서 값 정렬 전의 location 위치의 값을 구해주고 값 정렬이 끝난 뒤, 그 값의 위치를 구해준다.
처음에 Dictionary를 이용해서 풀어보려 하다가 정렬 문제로 애먹어서 배열을 두개 이용하는 방법으로 접근하니 좀 더 쉽게 풀렸다.