반응형
입력
인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면
J를 대기목록의 가장 마지막에 넣습니다. 그렇지 않으면 J를 인쇄합니다.
출력
인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요
풀이
중요도와 문서를 함께 구분하기 위해 튜플을 사용해서 풀었다
이 문제의 함정은 for문을 사용해서 풀시, index값에 주의해야하는 점이다
큐의 방식으로 작동하며 문서 순서가 바뀌면 처음부터 다시 배열을 확인하는 작업을 거친다
+
더 좋은 방법은 큐를 정렬하며 동시에 location 위치의 값을 찾는 것이다
배열의 첫번째는 중요도가 가장 높은 문서를 배치하고
location의 위치가 0 일 경우 전체 문서 개수 - 정렬된 문서 개수 + 1 을 출력한다
location의 위치가 0이 아닐 경우 첫번째 문서를 제거하며 location 값을 하나 낮춘다
Swift 전체 코드
var list : [(Int, Int)] = []
var i = 1
var count = 0
for i in 0..<priorities.count {
list.append((i, priorities[i]))
}
while count != list.count - 1 {
if list[count].1 < list[i].1 {
let temp = list.remove(at: count)
list.append(temp)
i = count
count = 0
continue
}
if i == list.count - 1 {
count += 1
i = count
}
i += 1
}
return list.firstIndex(where: { $0.0 == location})! + 1
+ 개선된 코드
var priority = priorities
var position = location
while priority.count > 0 {
if priority.contains(where: { $0 > priority[0] }) {
let first = priority.removeFirst()
priority.append(first)
position = position - 1 < 0 ? priority.count - 1 : position - 1
} else {
if position == 0 {
return priorities.count - priority.count + 1
}
priority.removeFirst()
position -= 1
}
}
return 0
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[백준] DP - 11726번 2xN 타일링 (0) | 2021.04.09 |
---|---|
[프로그래머스] 힙 - 디스크 컨트롤러 (0) | 2021.04.08 |
[프로그래머스] 2021 Kakao Blind Recruitment - 합승 택시 요금 (0) | 2021.04.06 |
[프로그래머스] 2021 Kakao Blind Recruitment- 신규 아이디 추천 (0) | 2021.04.04 |
[프로그래머스] 2020 Kakao Blind Recruitment - 문자열 압축 (0) | 2021.04.02 |