https://school.programmers.co.kr/learn/courses/30/lessons/64062#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근방법
- 건너는 사람은 무한대, 각 돌의 내구도는 1 ~ 2억, 돌 내구도 배열의 크기는 최대 20만
- 따라서 돌 배열을 순회하며 O(nlogm) 이하의 알고리즘으로 풀이를 해야한다
- 한명씩 건널때 마다 돌 내구도는 -1이된다
- 이분탐색으로 1 ~ 2억의 범위에서 적당한 사람 수 를 구하기로한다
- 먼저 돌 내구도의 max값을 구해 이분 탐색을 구현한다
- 건넌사람이 mid 값으로 가정하고 돌 내구도 배열을 순회한다
- s-m 값이 0 이하인구간이 k이상 유지된다면 해당 케이스는 건널 수 없는 케이스다
- 발견하지 못했다면 건널 수 있는 케이스이다
- 건널 수 있는 케이스라면 ans와 최대 비교후 갱신한다
코드
import java.util.*;
class Solution {
int ans = 0;
public int solution(int[] stones, int k) {
int max = 0;
for(int i : stones) max = Math.max(max,i);
bs(max,stones,k);
return ans+1;
}
void bs(int max,int[] stones,int k){
int l =1;
int r =max;
while(l <= r){
int m = (l+r)/2;
if(check(m,stones,k)){
ans = Math.max(ans,m);
l = m+1;
}else{
r = m-1;
}
}
}
boolean check(int m, int[] stones,int k){
int cnt = 0;
for(int s : stones){
if(s-m <= 0){
cnt++;
}else{
cnt = 0;
}
if(cnt >= k) return false;
}
return true;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV2 가장 큰 정사각형 찾기 (2) | 2024.11.04 |
---|---|
[프로그래머스] LV 2 테이블 해시 함수 (0) | 2024.11.04 |
[프로그래머스] LV 2 괄호변환 (0) | 2024.11.01 |
[프로그래머스] LV 3 보석 쇼핑 (3) | 2024.10.31 |
[프로그래머스] LV 3 행렬 테두리 회전하기 (0) | 2024.10.31 |