알고리즘 문제 풀이

[프로그래머스] 입국심사 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])
//    }