시간&메모리 제한
문제
입력&출력
문제풀이
package com.jungol;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class jungol_1510 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
ArrayList<Paper> pa = new ArrayList<>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int tmp1 = Integer.parseInt(st.nextToken());
int tmp2 = Integer.parseInt(st.nextToken());
if(tmp1>tmp2) {
pa.add(new Paper(tmp1, tmp2));
}else{
pa.add(new Paper(tmp2, tmp1));
}
}
Collections.sort(pa);
int ans=0;
int[] dp = new int [N];
for (int i = 0; i < N; i++) {
Paper now = pa.get(i);
for (int j = 0; j < i; j++) {
Paper next = pa.get(j);
if(now.lar>=next.lar && now.sma>=next.sma) {
dp[i]=Math.max(dp[i],dp[j]);
}
}
dp[i]++;
ans=Math.max(ans, dp[i]);
}
System.out.println(ans);
}
static class Paper implements Comparable<Paper>{
int lar;
int sma;
public Paper(int lar, int sma) {
super();
this.lar = lar;
this.sma = sma;
}
@Override
public int compareTo(Paper o) {
if(this.lar==o.lar) {
return this.sma-o.sma;
}
return this.lar-o.lar;
}
}
}
- 색종이 올려 놓기 문제는 겹치지 않게 최대한 많은 색종이를 세는 문제입니다.
- 색종이의 길이를 긴 크기, 작은 크기로 분리하여 클래스에 담아줍니다.
- 색종이를 Comparable를 통해서 큰 길이를 먼저 비교 해서 정렬을 하고, 큰 길이가 같으면 작은 길이를 비교해서 정렬합니다.
- for문을 통해서 dp를 이용해서 최적의 갯수를 구하는 로직을 작성해주면 됩니다.
'Algorithm > 정올 알고리즘' 카테고리의 다른 글
정올_2514 문자열 찾기(자바) / 문자열 (0) | 2021.07.02 |
---|---|
정올_2604 그릇(자바) / 문자열 (0) | 2021.07.01 |
정올_1740 소수(자바) / 수학2 (0) | 2021.06.30 |
정올_1370 회의실 배정(자바) / 탐욕 알고리즘 (0) | 2021.06.30 |
정올_2811 소수와 합성수(자바) / 수학2 (0) | 2021.06.29 |