전형적인 이분탐색 문제에서 한 단계를 더 거치도록 만들어진 문제이다.
잘라낼 랜선의 길이를 이분탐색하며 해당 값을 get_lan()함수에 넣어 출력된 값이
문제에 주어진 조건을 만족하는지 기록하며 풀이해나가야한다.
Parametric Search라고 할 수 있을 것 같다.
위처럼 python으로 어렵지 않게 해결했지만, Swift로 풀이하면서는 알 수 없는 이유로 계속 틀렸다..
두가지 이유가 있었다.
1. 틀렸습니다. 를 유발한 원인
2. 런타임 에러 를 유발한 원인
이 부분을 처음에는 data.min()!으로 작성하였었다.
그러면 안되는 예시는 아래와 같다.
극단적인 예를 들어, 3 3 / 200 / 100 / 1 이 입력으로 주어졌을 때, 답은 100이 되어야한다.
하지만 data.min()!, 즉 1이 end의 시작점으로 설정된다면 답을 구해낼 수 없을 것이다.
처음에는 start = 0 으로 작성했었다.
이는 12번 줄에서 결국 0으로 나누는 계산으로 오류를 유발하게 된다.
처음에는 이것을 0으로 두나 1로 두나 크게 영향이 없을 것이라고 생각했으나,
본 문제 특성상, 이분탐색은 start와 end 포인터가 완전히 엇갈려야 로직이 끝나게된다.
start와 end가 엇갈리는 현상이 1과 data.max()!사이에서 일어나면 상관이 없으나,
길이가 1인 랜선으로 나누어야만 k개의 랜선을 n개의 랜선으로 나눌 수 있는 경우, 마지막에 0을 get_lan()의 parameter로 넘겨주는 상황이 필연적으로 발생하게 된다.
따라서 "런타임 에러"가 발생하게 된다.
=> start = 1로 두어야한다.
백준 1806: 부분합 (Swift) (0) | 2022.08.20 |
---|---|
백준 10026: 적록색약 (Swift) (0) | 2022.08.19 |
백준 2470: 두 용액 ( Swift ) (0) | 2022.08.15 |
백준 3273: 두수의 합 (Swift) (0) | 2022.08.15 |
백준 1644: 소수의 연속합 (Swift) 풀이 2 (0) | 2022.08.13 |