문제분석목표: 작업들을 순서대로 넣으며 작업하다가 맨 마지막에 작업을 맡게되는 코어를 구하세요. 문제를 읽어보면 최적의 시간을 구하는 문제가 아니다. 0초에 코어가 비어있다면 무조건 작업을 넣어놓기때문이다. [1, 1, 100] 의 코어가 있고 4개의 작업이있다면 100의코어에 그냥 집어넣는꼴이다. 이를 감안하고 접근을해야한다. 문제접근 1: 문제설명서대로 풀기 0초에 모든 작업을 넣고 1초에 다시 작업이 가능한지 확인하고 2초에 다시 작업이 가능한지 확인하고 . . . 마지막 작업이 들어가면 그 코어를 반환하는 로직이다. 이렇게 구현하면 매 초마다 모든 코어를 돌려봐야하므로 O(n)만큼 든다. -> 정확도는 잘 나오지만 효율성 에러가 뜬다. 문제 접근 2: 효율성 해결 아마 효율성 에러가 뜨는 원인은 0초부터 매초 마다 O(n)의 작업을 하기때문일것이다. O(n)의 작업을 최소한 줄이기위해선, 마지막 작업을 수행하는 시간(time)을 구해야한다. 마지막 작업의 시간을 이분 탐색으로 구한다. 최소값은 0 . 최대값은 코어의갯수 * (코어의 최대시간) mid의 시간에 수행한 모든 작업의 갯수가 N보다 작으면 UP 크면 Down을 작업한다. 이 작업을 시행하면 T*O(N)이 log(T)*O(N)으로 줄어든다. 문제풀이
|