https://www.acmicpc.net/problem/3985
์ฝ๋
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int L = scan.nextInt(); // ๋กค์ผ์ดํฌ ๊ธธ์ด
int N = scan.nextInt(); // ๋ฐฉ์ฒญ๊ฐ์ ์
boolean[] cake = new boolean[L+1]; // ๋กค์ผ์ดํฌ ๊ธธ์ด+1 ๋ฐฐ์ด ์ ์ธ
int[] getCake = new int[N+1];
int[][] arr = new int[N][2];
int maxIndex = 0; // ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ ๊ธฐ๋ํ ๋ฐฉ์ฒญ๊ฐ
int maxCake = 0; // ์ค์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ ๋ฐ์ ๋ฐฉ์ฒญ๊ฐ
for(int i=0; i<N; i++) {
arr[i][0] = scan.nextInt();
arr[i][1] = scan.nextInt();
}
// ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ผ์ดํฌ์ ์กฐ๊ฐ ์ ์ฐพ๊ธฐ
for(int i=0; i<N; i++) {
if(arr[i][1] - arr[i][0] > maxIndex)
maxIndex = arr[i][1] - arr[i][0];
}
// ์ค์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ ๋ฐ์ ๋ฐฉ์ฒญ๊ฐ ์ฐพ๊ธฐ
for(int i=1; i<=N; i++) {
for(int j=arr[i-1][0]; j<=arr[i-1][1]; j++) {
if(!cake[j]) { // ๋ฐฉ์ฒญ๊ฐ์ด ๊ธฐ๋ํ ๋ฒํธ๊ฐ ์ฒดํฌ๊ฐ ์๋์ด ์๋๊ฒฝ์ฐ
getCake[i] ++; // i๋ฒ์งธ ๋ฐฉ์ฒญ๊ฐ ์ผ์ดํฌ +1
cake[j] = true; // ์ผ์ดํฌ๋ฅผ ๋ฐ์์ผ๋ฏ๋ก ์ฒดํฌํ์
}
}
}
// ๋ฐฉ์ฒญ๊ฐ ์ค ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ์ผ์ดํฌ ์ ์ฐพ๊ธฐ
for(int i=1; i<getCake.length; i++) {
if(getCake[i] > maxCake)
maxCake = getCake[i];
}
// ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๊ณ ์๋ ๋ฐฉ์ฒญ๊ฐ์ด ์ฌ๋ฌ๋ช
์ธ ๊ฒฝ์ฐ => ๋ฒํธ๊ฐ ์์ ์ฌ๋ ์ถ๋ ฅ
for(int i=1; i<=N; i++) {
if(maxIndex == arr[i-1][1] - arr[i-1][0]) {
System.out.println(i);
break;
}
}
// ์ค์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๋ฐฉ์ฒญ๊ฐ์ด ์ฌ๋ฌ๋ช
์ธ ๊ฒฝ์ฐ => ๋ฒํธ๊ฐ ์์ ์ฌ๋ ์ถ๋ ฅ
for(int i=1; i<getCake.length; i++)
if(getCake[i] == maxCake) {
System.out.println(i);
break;
}
scan.close();
}
}
ํ์ด
๋ฌธ์ ์ ์กฐ๊ฑด๋๋ก ๊ทธ๋๋ก ๊ตฌํํ๋ ค๋ค ๋ณด๋ ์ข ๋ณต์กํด์ง ๊ฒ ๊ฐ๋ค.
๋ฌธ์ ์์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๋ฐฉ์ฒญ๊ฐ์ด๋ ์ค์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๋ฐฉ์ฒญ๊ฐ์ด ์ฌ๋ฌ๋ช ์ผ ์ ์๋๋ฐ, ์ด๋ ๋ฒํธ๊ฐ ์์ ์ฌ๋์ ์ถ๋ ฅํด์ผ ํ๋ค.
๊ทธ๋์ ์ ๊ทผ๋ฐฉ๋ฒ์,
1) ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ ์ผ์ดํฌ์ ์กฐ๊ฐ ์๋ฅผ ์ฐพ๋๋ค.
for(int i=0; i<N; i++)
if(arr[i][1] - arr[i][0] > maxIndex)
maxIndex = arr[i][1] - arr[i][0];
2) ์ค์ ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ ๋ฐ์ ๋ฐฉ์ฒญ๊ฐ์ ์ฐพ๋๋ค.
for(int i=1; i<=N; i++) {
for(int j=arr[i-1][0]; j<=arr[i-1][1]; j++) {
if(!cake[j]) { // ๋ฐฉ์ฒญ๊ฐ์ด ๊ธฐ๋ํ ๋ฒํธ๊ฐ ์ฒดํฌ๊ฐ ์๋์ด ์๋๊ฒฝ์ฐ
getCake[i] ++; // i๋ฒ์งธ ๋ฐฉ์ฒญ๊ฐ ์ผ์ดํฌ +1
cake[j] = true; // ์ผ์ดํฌ๋ฅผ ๋ฐ์์ผ๋ฏ๋ก ์ฒดํฌํ์
}
}
}
๋ฐฉ์ฒญ๊ฐ ์์ผ๋ก ํด์ P๋ฒ ~ K๋ฒ ์กฐ๊ฐ ๊น์ง ๋ง์ฝ ์ฒดํฌ๊ฐ ๋์ด์์ง ์์ผ๋ฉด
๊ทธ ๋ฐฉ์ฒญ๊ฐ์ ๊ทธ ์ผ์ดํฌ์กฐ๊ฐ์ ์ป์ ์ ์์ผ๋ฏ๋ก +1 ํ๊ณ , ์ฒดํฌ ํ์๋ฅผ ํ๋ค.
3) ์์์ ๊ณ์ฐํ ๊ฐ์ฅ ๋ง์ ๋ฐฉ์ฒญ๊ฐ์ ํตํด ๊ฐ์ฅ ๋ง์ ์กฐ๊ฐ์ ๋ฐ์ ์ผ์ดํฌ๋ ๋ช์กฐ๊ฐ์ธ์ง ์ฐพ๋๋ค.
for(int i=1; i<getCake.length; i++)
if(getCake[i] > maxCake)
maxCake = getCake[i];
4) ์ ์์ ์ด ๋๋ ํ ๋ฐฉ์ฒญ๊ฐ์ด ์ฌ๋ฌ๋ช ์ผ ๊ฒฝ์ฐ ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค.
for(int i=1; i<=N; i++) {
if(maxIndex == arr[i-1][1] - arr[i-1][0]) {
System.out.println(i);
break;
}
}
for(int i=1; i<getCake.length; i++) {
if(getCake[i] == maxCake) {
System.out.println(i);
break;
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1748๋ฒ: ์ ์ด์ด ์ฐ๊ธฐ 1(๊ตฌํ) (0) | 2020.03.05 |
---|---|
[๋ฐฑ์ค] 1912๋ฒ: ์ฐ์ํฉ(DP) (0) | 2020.03.05 |
[Codeforces] 509A: Maximum in Table (0) | 2020.03.05 |
[๋ฐฑ์ค] 1551๋ฒ: ์์ด์ ๋ณํ(์ํ, ์๋ฎฌ๋ ์ด์ ) (0) | 2020.03.04 |
[๋ฐฑ์ค] 1526๋ฒ: ๊ฐ์ฅ ํฐ ๊ธ๋ฏผ์(์๋ฎฌ๋ ์ด์ ) (0) | 2020.03.04 |
๋๊ธ