적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Baekjoon

[Swift 알고리즘] 백준 1966 프린터 큐

hongssup_ 2023. 3. 30. 22:38
반응형

프린터 큐 Silver3 (40분)

백준 1966번 프린터 큐

포인터를 사용한 큐로 구현 : 69108KB 8ms

히히 제출 답안들 중에 내가 시간 젤 빨라뚬 ^^ 뿌듯 

근데 구현 중에 계속 조건 몇개 놓치느라 생각보다 오래걸림,, 40분이라니,, 집중해서 시간만 좀 단축하자..!

구현 방법

중요도 배열 priority 에서 최대값 max를 먼저 구해준다. 

priority 의 인덱스 0 부터 탐색

1) 해당 인덱스의 중요도가 max일 경우 

  - 해당 인덱스의 element를 0으로 변경해준 후 프린트가 되었기 때문에 result += 1 해준다. 

  - 만약 해당 인덱스가 타겟 인덱스와 동일하다면 반복문을 빠져나오기

  - 아니면 max 값을 업데이트 해준다. 

2) 해당 인덱스의 중요도가 max 보다 낮을 경우

  - 해당 인덱스가 타겟 인덱스(m)와 동일할 경우, 타겟 문서를 뒤로 보내면서 타겟 인덱스를 업데이트해준다. 

  - 타겟 문서가 아니면 해당 문서를 맨 뒤로 보내고 해당 인덱스는 0으로 변경해준다. 

let count = Int(readLine()!)!
for _ in 0..<count {
    let input = readLine()!.split(separator:" ").compactMap { Int($0) }
    var m = input[1] //타겟 인덱스
    var priority = readLine()!.split(separator: " ").compactMap { Int($0) } //중요도 배열

    var max = priority.max()
    var result = 0
    var index = 0
    while true {
        if priority[index] == max {
            priority[index] = 0
            result += 1
            if index == m { break }
            max = priority.max()
        } else {
            if index == m { m = priority.count }
            priority.append(priority[index])
            priority[index] = 0
        }
        index += 1
    }
    print(result)
}

 

removeFirst() 사용할 경우

 

728x90
반응형