Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Spring Batch
- 스프링배치 엑셀
- aop proxy
- api 아이템 리더
- 스프링배치 csv
- 아이템 리더 페이징 처리
- 스프링 트랜잭션 관리
- step 사이 변수 공유
- mybatis
- executioncontext 변수 공유
- 트랜잭션 분리
- 스프링 배치 5
- JSONObject 분할
- abstractpagingitemreader
- 선언적 트랜잭션 관리
- step 값 공유
- 마이바티스 트랜잭션
- 읽기 작업과 쓰기 작업 분리
- 스프링배치 메타테이블
- executioncontext
- flatfileitemwriter
- JSONArray 분할
- stepexecutionlistener
- step 여러개
- job parameter
- spring batch 변수 공유
- spring batch 5
- 아이템 리더 커스텀
- JSON 분리
- JSON 분할
Archives
- Today
- Total
ebson
boj.kr/2343 기타 레슨 (silver1) 자바 풀이 본문
1. lo를 0, hi를 기타 레슨 시간 목록 lectures의 총합으로 초기화한다.
2. 출력할 변수 ans에는 hi를 저장한다.
3. lo가 hi이하이면 아래 4-9를 반복한다.
4. mid에 (lo+hi)/2를 저장한다.
5. mid가 lectures 요소 중 최대값보다 작으면, lo를 mid+1으로 저장하고 다음 반복으로 넘어간다.
6. subLen을 0, subCnt를 1으로 초기화하고 lectures를 순회하면서 아래 6.1-6.2를 반복한다.
6.1. subLen에 lectures의 요소를 더한 값이 mid 이하이면 sub에 lectures의 요소를 더한다.
6.2. 만약 mid보다 크다면 subCnt에 1을 더하고 subLen에는 lectures의 요소를 저장한다.
7. subCnt가 M(블루레이의 개수) 이하이면 ans에 ans와 mid 중 더 작은 값을 저장한다.
8. hi를 mid-1으로 갱신한다.
9. subCnt가 M보다 크면 lo에 mid+1으로 갱신한다.
10. ans를 출력한다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N;
static int M;
static int[] lectures;
static int maxLen;
static int subLen;
static int subCnt;
static int lo;
static int hi;
static int mid;
static int ans;
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
lectures = new int[N];
lo = 0;
st = new StringTokenizer(br.readLine());
for (int i=0; i<N; i++) {
lectures[i] = Integer.parseInt(st.nextToken());
maxLen = Math.max(maxLen, lectures[i]);
hi += lectures[i];
}
ans = hi;
while (lo <= hi) {
mid = (lo+hi) / 2;
if (mid < maxLen){
lo = mid + 1;
continue;
}
subLen = 0;
subCnt = 1;
for (int i=0; i<N; i++) {
if ((subLen + lectures[i]) <= mid) {
subLen += lectures[i];
} else {
subCnt += 1;
subLen = lectures[i];
}
}
if (subCnt <= M) {
ans = Math.min(ans, mid);
hi = mid-1;
} else {
lo = mid+1;
}
}
System.out.println(ans);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Comments