내가 생각했을때 문제에서 원하는부분
첫째 줄에 롤 케이크의 길이 L (1 ≤ L ≤ 1000)이 주어진다.
둘째 줄에는 방청객의 수 N (1 ≤ N ≤ 1000)이 주어진다.
다음 N개 줄에는 각 방청객 i가 종이에 적어낸 수 Pi와 Ki가 주어진다. (1 ≤ Pi ≤ Ki ≤ L, i = 1..N)
*
첫째 줄에 가장 많은 조각을 받을 것으로 기대하고 있던 방청객의 번호를 출력한다.
둘째 줄에 실제로 가장 많은 조각을 받은 방청객의 번호를 출력한다.
각 경우에 조건을 만족하는 방청객이 두 명 이상이라면 그중 번호가 가장 작은 방청객의 번호를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받는다.
예상 조각 수 계산: 각 방청객의 요청에 따라 예상 조각 수를 계산한다.
실제 조각 수 계산: 요청한 조각을 순서대로 확인하고, 이미 다른 방청객에게 할당된 조각은 건너뛴다.
최대 조각 수 찾기: 예상과 실제로 받은 조각 수를 비교하여 가장 많은 조각을 받은 방청객의 번호를 결정해준다.
결과 출력: StringBuilder를 사용하여 최종 결과를 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 3985번 문제
public class Main975 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int L = Integer.parseInt(br.readLine());
int N = Integer.parseInt(br.readLine());
int[] cake = new int[L + 1];
int[] expected = new int[N + 1];
int[] actual = new int[N + 1];
// 방청객의 요청을 처리
for(int i = 1; i <= N; i++) {
String[] input = br.readLine().split(" ");
int P = Integer.parseInt(input[0]);
int K = Integer.parseInt(input[1]);
// 예상 조각 수 계산
expected[i] = K - P + 1;
// 실제 조각 수 계산
for(int j = P; j <= K; j++) {
if(cake[j] == 0) { // 조각이 비어있다면
cake[j] = i; // 이 조각을 i번째 방청객에게 할당
actual[i]++;
}
}
}
// 가장 많은 조각을 받을 것으로 기대한 방청객의 번호 찾기
int maxExpected = 0;
int expectedWinner = 0;
for(int i = 1; i <= N; i++) {
if(expected[i] > maxExpected) {
maxExpected = expected[i];
expectedWinner = i;
} else if (expected[i] == maxExpected && i < expectedWinner) {
expectedWinner = i;
}
}
// 실제로 가장 많은 조각을 받은 방청객의 번호 찾기
int maxActual = 0;
int actualWinner = 0;
for(int i = 1; i <= N; i++) {
if(actual[i] > maxActual) {
maxActual = actual[i];
actualWinner = i;
} else if(actual[i] == maxActual && i < actualWinner) {
actualWinner = i;
}
}
// 결과 출력
sb.append(expectedWinner).append("\n").append(actualWinner).append("\n");
System.out.print(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.