티스토리 뷰
매개변수 탐색의 개념을 잘 이해할 수 있는 좋은 문제
풀이
알고리즘 파악
이분탐색 (매개변수 탐색)
일반적인 매개변수 탐색 문제에서 조금 변형된 문제이다.
문제의 핵심은 -> 몇 분에 아이들이 전부 탑승할 것인가? + 몇 번째 놀이기구에 마지막 아이가 탑승할 것인가?이다.
하나씩 살펴보면
1. 몇 분에 아이들이 전부 탑승할 것인가? -> 매개변수 탐색을 통해 시간을 구한다. begin=0 , end = 30*n으로 설정한다.
2. 몇 번째 놀이기구에 마지막 아이가 탑승할 것인가? ->
1번에서 구한 시간을 n이라 하면
총 놀이기구에 탑승할 아이들 수 - (n-1)분까지 놀이기구에 탑승한 아이들 수
= n분째에 놀이기구에 탑승할 아이들의 수
이다.
이 n분째에 놀이기구에 탑승할 아이들의 수를 for문을 통해 n분째 탑승 가능한 놀이기구에 하나씩 채워주면 된다.
전부 탑승하면 해당 놀이기구의 index를 출력하면 된다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int n,m,lastIdx,answer;
static int[] arr;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m= Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
arr = new int[m];
for(int i=0; i<m; i++)
{
arr[i] = Integer.parseInt(st.nextToken());
}
long begin=0;
long end = ((long)30*n);
long min = 0;
long max_time =0;
while(begin<=end)
{
long mid = (begin+end)/2;
long result = search(mid);
if(result<n)
{
begin=mid+1;
min =result; //(아이들이 전부 탐승 가능한 최소 분-1)분의 아이들의 수
}
else if(result>=n)
{
end=mid-1;
max_time = mid; //아이들이 전부 탐승 가능한 최소 분
}
}
int cnt = n-(int)min; //추가적으로 세야할 아이들의 수
for(int i=0; i<m; i++)
{
if((max_time%arr[i])==0) //해당 시간에 스타트
{
cnt--;
if(cnt==0) answer=i+1;
}
}
bw.write(Integer.toString(answer));
bw.flush();
bw.close();
br.close();
}
static long search(long time)
{
long cnt=0;
for(int i=0; i<m; i++)
{
long cnt_ = time/arr[i];
cnt+=cnt_+1;
}
return cnt;
}
}
'알고리즘' 카테고리의 다른 글
[백준] 5214 환승 -JAVA (0) | 2022.03.07 |
---|---|
[백준] 5719 거의 최단 경로 - JAVA (0) | 2022.03.03 |
[백준] 2842 집배원 한상덕 - JAVA (0) | 2022.02.13 |
[백준] 16930 달리기 - JAVA (0) | 2022.02.08 |
[백준] 3197 백조의 호수 - JAVA (0) | 2022.02.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- rollup ts react npm
- rollup typescript
- rollup react.js npm
- attempted import error: bvh_struct_definitions' is not exported from './gpu/bvhshaderglsl.js' (imported as 'bvhshaderglsl').
- 카드 짝 맞추기 자바스크립트
- typescript gsls
- react leva
- 카카오 카드 짝 맞추기 javascript
- 카카오 2021 카드 짝 맞추기
- rollup typescript react
- react 3d text
- 카카오 카드 짝 맞추기 자바스크립트
- react fiber 3d
- next.js import glsl
- eslint
- react three fiber
- react glsl
- react three fiber leva
- 카드 짝 맞추기 javascript
- vue3
- react 3d animation
- webpack glsl
- leva
- react 3d 에니메이션
- Vue.js
- three.js leva
- next.js glsl
- react 3d
- ts glsl
- vue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함