알고리즘 문제 풀이
[프로그래머스] 입국심사 43238 swift
lgvv
2021. 11. 18. 20:08
✅ 여전히 배워야 할 것이 많다.
총 시간을 기준으로 로직을 작성하는 방법을 보면서 수학적 사고가 정말 중요하다고 새삼 또 느꼈다.
//
// main.swift
// algorithm
//
// Created by Hamlit Jason on 2021/11/17.
// https://programmers.co.kr/learn/courses/30/lessons/43238
import Foundation
// 이 문제의 경우 총 걸리는 시간을 기준으로 풀어야 한다.
func solution(_ n:Int, _ times:[Int]) -> Int64 {
var left = 1
var right = 0
var mid = 0
var sum = 0
left = 1
right = times.max()! * n
var answer = 0
while (left <= right) {
mid = (left + right) / 2
sum = 0
times.forEach { time in
// print("mid \(mid) time \(time) mid/time \(mid/time)")
sum += mid / time
}
// print(sum)
// if sum == n {
// print("out")
// return Int64(mid)
// } else
if sum >= n { // 처리한 사람이 더 많으면
answer = mid
right = mid - 1
// print("많아 left : \(left) right : \(right) mid : \(mid)")
} else if sum < n { // 처리한 사람이 더 적으면
left = mid + 1
// print("적어 left : \(left) right : \(right) mid : \(mid)")
} else {
// print("예외 케이스가 있습니다.")
}
}
return Int64(answer)
}
//print(solution(6, [7,10]))
//print("답은 : \(solution(3, [1,1,1]))")
//print("답은 : \(solution(3, [1,99,99]))")
//print("답은 : \(solution(2, [2,5]))")
//print("답은 : \(solution(10, [10,100]))")
print("답은 : \(solution(13, [2,5]))")
//print("답은 : \(solution(2, [1,2]))")
//var kk = [1,2,5,3,4,5]
//kk = kk.map{$0-1}
//print(kk.indices)
//imerArray.indices
// .filter{ timerArray[$0] == 0 } // 특정값의 인덱스 파악
// .forEach{
// print("idx \($0)")
// count += 1 // 카운트 1 증가
// print(timerArray[$0])
// }