문제 설명
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
- 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
문제 풀이 아이디어
입력으로 주어지는 priorities를 내림차순 한 배열을 queue에 저장한다.
우선순위가 높은 프로세스가 queue에 top에 위치하므로 priorities의 원소와 queue의 현재 top을 비교한다.
동일 할 경우 queue에서 pop 하고 동일하지 않을 경우 priorities의 값과 queue의 top 비교를 계속 진행한다.
만약 동일하고, index 또한 location과 동일하면 구하고싶은 location의 찾는 횟수가 나오기 때문에 이를 return 한다.
만약 같지 않을 경우 찾는 location이 아니므로 해당 작업을 priorites의 length까지 반복한다.
코드
import java.util.LinkedList
import java.util.Queue
class Solution {
var queue: Queue<Int> = LinkedList<Int>()
fun solution(priorities: IntArray, location: Int) : Int {
priorities.sortedDescending().forEach{
queue.add(it)
}
var answer = 0
while (!queue.isEmpty()) {
for (i in priorities.indices) {
if (priorities[i] == queue.peek()) {
queue.poll()
answer++
if (i == location) {
return answer
}
}
}
}
return answer
}
}
배운점
- Kotlin 배열에서 sortedByDesending()을 사용하면 원래 collection의 변경없이 내림차순으로 정렬된 값을 구할 수 있다.
- Sort로 Collection 자체 순서 변경하려면 sort, 기존 collection이 바뀌지 않길 원하면 sorted 메서드를 사용하면된다.
정렬 메서드 정리 링크
https://bcp0109.tistory.com/298
'알고리즘 > 문제풀이 (C++,Kotlin)' 카테고리의 다른 글
[프로그래머스/Kotlin] Lv2 소수찾기 : 완전탐색 (0) | 2023.09.05 |
---|---|
[프로그래머스/Kotlin] Lv2 가장 큰 수 : 정렬 (0) | 2023.09.03 |
[우테코/Kotlin] 우아한 테크코스 온보딩 풀이 및 공부 (0) | 2023.08.14 |
[BOJ/C++] 10974번 모든 순열 (0) | 2023.03.15 |
[BOJ/C++] 2231번 분해합 (0) | 2023.03.14 |