Swift랑 친해지기/programmers 풀기

[프로그래머스] 프린터 (Swift)

데브킹덕 2022. 11. 9. 18:19

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
}