[프로그래머스] 프린터 (Swift)
https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
변수 설정
- array = priorities로 초기화한 인쇄 대기 목록
- result = 몇 번째로 인쇄하는지 확인
- index = location으로 초기화. 현재 location으로 지정한 요소가 몇번째에 있는지 확인 할 수 있는 변수
- printArray = 인쇄가 된 priorities 요소를 차례로 담은 배열 (사실 필요없음)
내풀이
1. 중요도를 떠나서 인쇄를 모두 하게 되면 언젠가는 원하는 요소가 뽑힐 것임
따라서 array의 개수가 0이 될떄까지 while문으로 반복했음
*for in 문을 통해 처음에 접근했는데 array의 요소를 삭제하고 추가할 것이라 에러가 날것이라 생각했음
2. index가 0일때와 0이 아닐때로 나누었음 (if/else문)
index가 0이면 location으로 지정한 물건을 인쇄할지 맨 뒤로 넘기는지 정하는 차례이기 때문임
3. 원하는 인쇄물의 차례가 아닐때 array의 0번째가 최댓값인지 확인하였음(.max)
최댓값이면 printArray에 array[0]의 요소를 추가해주고, 첫번째 요소를 삭제해 주면 됨(append,removeFirst)
인쇄가 되었으므로 result를 1증가 시켜주었음
원하는 인쇄물의 차례가 아니고 array의 0번째가 최댓값이 아닐 경우,
array[0]번째 요소를 추가하고 0번째 요소를 제거해 주었음
최댓값이든 아니든 차례가 1 줄기 때문에 index 에 -1을 해주었음
4. index가 0이고 array[0]이 array요소중에 최대값일때,
즉 원하는 인쇄물이 가장 큰 인쇄중요도를 가질때
result에 1을 추가하여 리턴하도록 하였다.
* result는 0으로 초기화했고 차례순서이기 때문에 인쇄가 돼면 1을 증가해야함
index가 0인데 최댓값이 아닐경우에는
array[0]을 인쇄 대기줄 맨 뒤로 보내야 하기 떄문에 append,removeFirst를 사용
index의 값은 맨뒤로 가기 때문에 array배열의 수 - 1을 해주어야함
import Foundation
func solution(_ priorities:[Int], _ location:Int) -> Int {
var array = priorities
var result = 0
var index = location
var printArray = [Int]()
while array.count != 0{
if index != 0 {
if array[0] == array.max(){
printArray.append(array[0])
array.removeFirst()
result += 1
}
else{
array.append(array[0])
array.removeFirst()
}
index -= 1
}
else{
if array[0] == array.max(){
return result + 1
}
else{
array.append(array[0])
array.removeFirst()
index = array.count - 1
}
}
}
return 0
}