프로그래머스
[프로그래머스] 프로세스 Swift
띵지니어
2024. 6. 30. 23:39
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42587
내 코드
func solution(_ priorities: [Int], _ location: Int) -> Int {
var result: [(Int, Int)] = []
var tuple = priorities.enumerated().map { ($0.offset, $0.element) } // (0, 2) (1, 1) (2, 3) (3, 2)
while !tuple.isEmpty {
var maxValue = tuple.max(by: { $0.1 < $1.1 })!.1 // whlie 조건에서 항상 하나 이상의 값을 가짐
if let first = tuple.first?.1, first == maxValue {
result.append(tuple.removeFirst())
} else {
tuple.append(tuple.removeFirst())
}
}
return (result.enumerated().first(where: { $0.element.0 == location })?.offset ?? 0) + 1
}
Review
문제 접근 방식은
1. index와 priorities 를 튜플로 하는 리스트를 만듭니다.
2. priorities 에서 가장 큰 값을 체크하고 저장합니다.
3. 맨 앞 원소가 가장 큰 원소 인지 비교하고 가장 큰 원소면 대기열 맨 앞에서 제거하고, 그 값을 result에 넣어 줍니다.
4. 맨 앞 원소가 가장 큰 원소가 아니라면 대기열 끝에 다시 넣어 줍니다.
5. 3번 4번을 대기열이 빌 때까지 반복해 줍니다.
6. 프로세스가 들어온 결괏값(result)에 튜플의 0번 원소(index)를 location과 비교해서 몇 번째에 위치해 있는지 확인해 줍니다.
6-1. 결과에 +1 을 해준 이유는 index는 0 부터 시작하기 때문에 + 1 을 해주었습니다.
튜플을 사용한 이유는 해당 프로세스가 처음에 몇 번째에 위치해 있었는지 저장하고,
이후에 결과(result) 안에서 location에 위치해 있는 프로세스가 어디에 있는지 구분하기 위함입니다.
손 글씨로 해당 문제를 풀어보면 아래와 같습니다
반응형