티스토리 뷰
https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import Foundation
func solution(_ n:Int, _ times:[Int]) -> Int64 {
var start: Int64 = 0
var end: Int64 = 100000000000000000
var temp: Int64 = 0
repeat {
var middle = ( start + end ) / 2
var value: Int64 = 0
times.forEach {
value += middle / Int64($0)
}
if n < value {
end = middle - 1
} else if n > value {
start = middle + 1
} else if n == value {
temp = middle
break
}
temp = start
} while start <= end
var value: [Int64] = []
times.forEach {
value.append(temp / Int64($0))
}
var result: Int64 = 0
for i in 0 ..< times.count {
if result < Int64(times[i]) * value[i] {
result = Int64(times[i]) * value[i]
}
}
return result
}
|
cs |
풀이 과정
문제에 주어진 제한 사항을 보자.
- 입국심사를 기다리는 사람은 1명 이상 1,000,000,000명 이하입니다.
- 각 심사관이 한 명을 심사하는데 걸리는 시간은 1분 이상 1,000,000,000분 이하입니다.
- 심사관은 1명 이상 100,000명 이하입니다.
10억이란 숫자가 보이자마자 이분탐색 알고리즘을 떠올렸다. 코딩테스트에서 자주 출제되진 않지만 모르고 있다면 구현하기 아주 까다로운 알고리즘이다.
이분탐색에서 체크할 로직은 단순하다.
임의의 시간 x를 times 배열의 요소로 나눈 값들이 x라는 시간동안 각 심사관마다 처리하게 되는 사람의 수 가 된다. 이 값들을 모두 합쳤을때 문제에서 주어진 n명이 된다면 조건을 만족한다. (9줄 ~ 13줄)
다만, 문제에서 x의 최소값을 구하라고 하였으므로 위에서 언급한 방법으로 이분탐색으로 구한 시간 x에 대하여 각 심사관마다 처리하게 되는 사람의 수 를 모두 구한 뒤, 각 심사관 마다 한명을 처리하는데 걸리는 시간(times 배열의 요소)을 곱하여 모두 더하면 구하고자하는 정답이 된다. (25줄 ~ 35줄)
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- clean code 정리
- 링커
- 단어변환
- 알고리즘
- ios simulator
- 프로그래머스
- 클린 코드 줄거리
- 의존성
- 메모리 순환참조
- 클린 코드
- 순환참조
- 학교 과제
- clean code
- CLANG
- 전처리기
- 주입
- ios
- XcodeBuildSystem
- XCFramework
- dfs
- 여행경로
- 의존관계역전법칙
- BFS
- 생명 주기
- 클린 코드 정리
- swiftc
- SwiftUI
- 면접질문
- Swift
- 이분탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함