티스토리 뷰

728x90

문제

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

 

풀이 및 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int real_n = 0; //진짜로 많이 받는 방청객의 번호
		int real_cnt = 0; //진짜로 많이 받는 방청객의 조각 개수
		int fake_n = 0; //많이 받을 것이라고 예상되는 방청객의 번호
		int fake_cnt = 0; //예상되는 조각개수
		
		int l = Integer.parseInt(br.readLine());
		//롤케이크의 길이
		int n = Integer.parseInt(br.readLine());
		//방청객의 수
		int[] roll = new int[l];
		for(int i=1;i<=n;i++) {
			st = new StringTokenizer(br.readLine());
			int p = Integer.parseInt(st.nextToken())-1;
			int k = Integer.parseInt(st.nextToken())-1;
			if(fake_cnt<(k-p)) {
				fake_cnt = k-p;
				fake_n = i;
			}
			//가장 많은 조각을 받도록 예상되는 방청객
			
			int cnt = 0;
			for(int j=p;j<=k;j++) {
				if(roll[j]==0) {
					roll[j]=i;
					cnt++;
				}
			}
			if(cnt>real_cnt) {
				real_n = i;
				real_cnt = cnt;
			}
		}
		System.out.println(fake_n);
		System.out.println(real_n);
	}

}
반응형