✅ 여전히 배워야 할 것이 많다.
총 시간을 기준으로 로직을 작성하는 방법을 보면서 수학적 사고가 정말 중요하다고 새삼 또 느꼈다.
//
// 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])
// }
'알고리즘 문제 풀이' 카테고리의 다른 글
[Swift] 프로그래머스 LV1 실패율(시간 초과 해결) (1) | 2022.03.17 |
---|---|
[프로그래머스] SQL 고득점 Kit (MySQL) (0) | 2021.11.20 |
[프로그래머스] 힙(Heap) 42627 Swift (0) | 2021.11.16 |
[프로그래머스] 다리를 지나는 트럭 42583 swift (0) | 2021.11.16 |
[프로그래머스] 42586 기능개발 Swift (0) | 2021.11.16 |