일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 다이나믹프로그래밍
- Spring Framework
- 백준
- C++
- 프로그래머스
- DP
- 벤쿠버
- STL
- spring
- dfs
- 스프링 프레임워크
- binary search
- 백트래킹
- 시애틀
- Python
- 머신러닝
- 모두를 위한 딥러닝
- leetcode
- 딥러닝
- jvm
- 스타벅스
- Java
- 라인플러스
- 프로그래밍언어론
- 라인
- BFS
- C/C++
- 파이썬
- 알고리즘
- 릿코드
- Today
- Total
케이스윔의 개발 블로그
[백준][이분탐색] 3079번 입국검사 본문
문제
총 M명의 사람이 최소한의 시간으로 N개의 입국심사대를 통과해야할 때 최소한의 시간을 구하시오.
문제 출처: 백준 온라인 저지(https://www.acmicpc.net/problem/3079), 프로그래머스(https://programmers.co.kr/learn/courses/30/lessons/43238)
풀이
이분탐색으로 푸는 문제입니다. 처음에는 무슨 방법으로 풀어야하지? 생각이 들었는데 최소한의 시간을 구하기 위해 최대한의 범위를 잡은 다음, 그 범위 안에 M명의 사람이 심사가 가능하다면 시간을 줄여가고 가능하지 않다면 시간을 늘려가며 구할 수 있겠다는 생각이들었습니다. 이분탐색의 개념은 다른 문제와 비슷하게 low, mid, high를 통해 그대로 구현하면 되지만 여기선 값이 너무 큰 탓에 최대값을 정하는 데 어려움이 있었습니다. 사실 어려움은 아니고 모두 long long 타입으로 바꾸어주었는데도 오버플로우때문에 생기는 부분이 어딘지를 찾는데 시간이 걸렸습니다. 백준, 프로그래머스 둘 다 같은 문제인데 프로그래머스의 경우에는 input이 type이 정해져서 들어오는데 int형으로 들어오는 input을 통해 곱하기 연산을 할때 (long long)을 통해 명시적으로 type casting을 안해줘서 생긴 문제였습니다. 이분탐색에서는 최대값을 잡는게 중요하다 생각했는데 저는 가장 오래걸리는 심사시간*M 을 통해서 최대값을 정해주었습니다!
코드
https://github.com/kswim/Algorithm/blob/master/BinarySearch/3079.cpp
'Algorithm' 카테고리의 다른 글
[백준][이분탐색] 1654번 랜선자르기 (0) | 2018.11.28 |
---|---|
[백준][이분탐색] 15732번 도토리 숨기기 (2) | 2018.11.27 |
[백준][이분탐색] 2512번 예산 (0) | 2018.11.24 |
[백준][BFS] 7576번, 7569번 토마토 (1) | 2018.11.18 |
[백준] 1038번 감소하는 수, 1174번 줄어드는 수 (1) | 2018.11.18 |