Notice
Recent Posts
Recent Comments
Link
05-05 23:19
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 우리에프아이에스 #
- dbeaver
- 로드밸런스
- 우리에프아이에스
- 우리FIS아카데미 #
- 우리FISA #
- M2
- https
- 클라우드 서비스 개발 #
- 도메인
- route 53
- 맥
- 맥OS
- 리눅스
- sts
- spring
- mysql
- Java
- 우리FIS아카데미
- Gradle
- K-디지털트레이닝
- springboot
- HTTP
- 클라우드 서비스 개발
- jdk
- 글로벌소프트웨어캠퍼스
- 우리FISA
- AWS
- 맥북
Archives
- Today
- Total
<<개발일지>>
[결정알고리즘] 10.마구간 정하기 본문
<<풀이>>
결정 알고리즘을 활용해서 문제를 풀었다.
이 번 문제는 거리에 대해 가장 작은 거리 1과 최대 거리 9를 lt와 rt로 두고, mid = (lt + rt) / 2를 활용했다.
1 에서 9 사이에 정답이 무조건 있다는 전제가 깔려있기 때문이다.
이제 구한 mid로 실제 거리를 빼가면서 비교했는데, 우선 가장 첫번째 1 위치에 말을 두고 시작했다. 1에 두고 시작해야 공간확보에 유리하기 때문이다. 그다음 mid 보다 같거나 크면 중지하고 그 위치에 말을 뒀다. 그리고 1 위치에서 부터 거리를 구하던 것을 말을 둔 위치로 변경한 뒤 같은 작업을 반복했다.
그렇게 해서 나온 값이 넣을 수 있는 말이 실제 넣으려는 말의 수 보다 같거나 크면 그 값은 유력한 후보가 된다.
만약 크거나 같다면, mid 이하의 값은 무조건 되기 때문에 mid 아래는 무시한다. 그래서 lt를 mid + 1로 다시 초기화 시킨다.
이 과정을 lt > rt 되기 전까지 진행한다.
이 알고리즘의 핵심은 정렬된 값과 그 정렬된 값 안에 무조건 답이 있을 때 사용이 가능하다 !! 이점을 잘 기억해둬서 나중에 또 써먹자 ㅎㅎ
import java.util.Arrays;
import java.util.Scanner;
class Main{
private int total(int[] arr, int mid) {
int em = arr[0];
int count = 1;
for(int i = 1; i < arr.length; i++) {
if(arr[i] - em >= mid) {
count++;
em = arr[i];
}
}
return count;
}
private int solution(int n, int m, int[] arr) {
Arrays.sort(arr);
int rt = Arrays.stream(arr).max().getAsInt();
int lt = Arrays.stream(arr).min().getAsInt();
int answer = 0;
while(lt <= rt) {
int mid = (rt + lt) / 2;
if(total(arr, mid) >= m) {
answer = mid;
lt = mid + 1;
} else rt = mid - 1;
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
System.out.println(T.solution(n, m, arr));
}
}
'코딩테스트' 카테고리의 다른 글
[재귀함수] 2. 이진수 출력 (1) | 2024.01.26 |
---|---|
[재귀함수] 재귀함수 (1) | 2024.01.26 |
[결정알고리즘] 9. 뮤직비디오 (1) | 2024.01.24 |
[정렬] 8. 이분검색 (0) | 2024.01.20 |
[정렬] 7. 좌표 정렬 (0) | 2024.01.20 |