ALGORITHM/BOJ
[IM 대비] BOJ_3985 롤 케이크
lemon-scone
2021. 8. 28. 19:37
https://www.acmicpc.net/problem/3985
3985번: 롤 케이크
첫째 줄에 롤 케이크의 길이 L (1 ≤ L ≤ 1000)이 주어진다. 둘째 줄에는 방청객의 수 N (1 ≤ N ≤ 1000)이 주어진다. 다음 N개 줄에는 각 방청객 i가 종이에 적어낸 수 Pi와 Ki가 주어진다. (1 ≤ Pi ≤ Ki
www.acmicpc.net
코드가 너무너무 더럽지만 오늘은 빨리 IM 대비 문제를 최대한 풀어보는게 목표.. 최적화는 내일!
package IM1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_3985 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = null;
int L = Integer.parseInt(br.readLine()); // 롤케이크 길이
int N = Integer.parseInt(br.readLine()); // 방청객 수
int[] cake = new int[L + 1]; // 인덱스 1부터 사용
int[] exp = new int[N + 1]; // 방청객이 갖는 예상 케이크조각 수 저장
int[] real = new int[N + 1]; // 방청객이 갖는 실제 케이크조각 수 저장
for (int n = 1; n <= N; n++) {
st = new StringTokenizer(br.readLine(), " ");
// P번 조각부터 K번 조각까지 주세요
int P = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
exp[n] = K - P + 1;
for (int j = 1; j <= L; j++) { // 전체 케이크 조각 인덱스를 돌면서
for (int i = P; i <= K; i++) { // 원하는 조각에 방청객번호 입력
if (cake[i] == 0) {
cake[i] = n;
real[n]++;
break;
}
}
}
//System.out.println(Arrays.toString(cake));
//System.out.println(Arrays.toString(exp));
//System.out.println(Arrays.toString(real));
}
// 가장 많은 조각을 받을 것으로 기대하고 있던 방청객 번호
int emax = 0, eidx = 0;
for (int i = 0; i < exp.length; i++) {
if (emax < exp[i]) {
emax = exp[i];
eidx = i;
}
}
System.out.println(eidx);
// 실제로 가장 많은 조각을 받은 방청객 번호
int rmax = 0, ridx = 0;
for (int i = 0; i < real.length; i++) {
if (rmax < real[i]) {
rmax = real[i];
ridx = i;
}
}
System.out.println(ridx);
}
}