https://programmers.co.kr/learn/courses/30/lessons/42587?language=swift
필수 로직을 한글로 잘 쓰면 어려울 것이 전혀 없었던 문제.
내 로직은 이랬다.
일단 priorities가 [Int] 형식인데,
location 번째를 원한다는 것을 알려주기 위해 다음과 같이 선언하는 것을 전제한다.
var printers: [(Int, String)] = []
for (i, e) in priorities.enumerated() {
if location == i {printers.append((e, "target"))}
else { printers.append((e, ""))}
}
그리고 구체적으로 다음 로직을 따르면 문제 해결!
// while (true)인 동안.
// 맨 앞 요소를 봄.
// if 맨 앞이 가장 크지 않음.
// 맨 앞 요소를 맨 뒤로 보냄.
// else
// answer에 1을 더하기.
// if 타겟을 찾았다면 answer를 리턴.
// else 배열에서 하나 지우기.
import Foundation
// 해당 인덱스의 요소 오른쪽에 더 큰 값이 없는지 확인.
func isBiggest(_ num: Int, _ printers: [(Int, String)]) -> Bool {
var mx = 0
for (i, e) in printers.enumerated() {
mx = max(mx, e.0)
}
return mx == num ? true : false
}
func solution(_ priorities:[Int], _ location:Int) -> Int {
var answer = 0
var printers: [(Int, String)] = []
for (i, e) in priorities.enumerated() {
if location == i {printers.append((e, "target"))}
else { printers.append((e, ""))}
}
while (true) {
// 맨 앞 요소를 봄.
// if 맨 앞이 가장 크지 않음.
// 맨 앞 요소를 맨 뒤로 보냄.
if isBiggest(printers.first!.0, printers) == false {
var t = printers.removeFirst()
printers.append(t)
}
// else
// answer에 1을 더하기.
// if 타겟을 찾았다면 answer를 리턴.
// else 배열에서 하나 지우기.
else {
answer += 1
if printers.first!.1 == "target" {
return answer
} else {
printers.removeFirst()
}
}
}
return answer - 1
}
'Algorithm' 카테고리의 다른 글
프로그래머스 - 최솟값 만들기 [Swift] (0) | 2021.09.15 |
---|---|
프로그래머스 - 괄호 변환 Swift (0) | 2021.09.07 |
프로그래머스 - 수식 최대화 [Swift] (0) | 2021.09.06 |
프로그래머스 - 5주차[Swift] (0) | 2021.09.06 |
프로그래머스 크레인 인형뽑기 게임 [Swift] (0) | 2021.09.03 |
최근댓글