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);
	}
}