728x90
그 전에 풀었던 LV2 문제 기능개발과 비슷한 맥락의 문제다.
스택/큐를 활용하는 문제이고 난이도는 그렇게 높지 않았다.
우선순위가 높은 작업이 있다면 그 작업을 가장 앞으로 옮기고 그 과정에서 앞에 있던 원소들은 전부 뒤로 순차적으로 보낸다.
이때 중요한 것은 처음에 주어진 location에 위치해있던 원소가 어디로 가는지 동선을 따라가는 것이다.
이 문제를 풀면서 생각한 논리적 흐름
- 처음 위치하고 있는 원소가 그 배열의 가장 큰 값이라면 값을 지우고(프린트 완료) ans에 1을 추가해준다.(1 cycle이 돌았음)
- 그리고 만약 내가 궁금한 원소의 순서가 0의 값을 갖으면(맨 앞에 위치) while문을 빠져나간다.
- 그게 아니라면 앞의 First값이 사라졌으니 앞으로 한칸 땡긴다.(idx -= 1)
- 처음 위치해 있는 값이 제일 큰 값이 아니라면 그 값을 지우고 맨 뒤에 다시 추가해준다.(배열의 맨 끝으로 보냄)
- 원소의 당시 위치(idx)를 최신화해주고 다시 위의 과정을 반복해서 한 칸씩 앞으로 밀어준다.
* 코드
func solution(_ priorities:[Int], _ location:Int) -> Int {
var arr = priorities
var idx = location
var ans = 0
while true {
if arr.first! == arr.max() {
arr.removeFirst()
ans += 1
if idx == 0 {
break
} else {
idx -= 1
}
} else {
let temp = arr.removeFirst()
arr.append(temp)
if idx == 0 {
idx = arr.count - 1
} else {
idx -= 1
}
}
}
return ans
}
정리(Today I Learned)
- 없음
'TIL > 알고리즘 공부' 카테고리의 다른 글
프로그래머스 Lv. 2 Swift 알고리즘 - 타겟 넘버 (0) | 2023.01.09 |
---|---|
프로그래머스 Lv. 2 Swift 알고리즘 - [1차] 뉴스 클러스터링 (0) | 2023.01.09 |
프로그래머스 Lv. 2 Swift 알고리즘 - n^2 배열 자르기 (0) | 2023.01.08 |
프로그래머스 Lv. 2 Swift 알고리즘 - 기능개발 (0) | 2023.01.08 |
프로그래머스 Lv. 2 Swift 알고리즘 - 튜플 (0) | 2023.01.06 |