8월 28일(월) - 다이나믹 프로그래밍 (2565번)
2565번: 전깃줄
첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(풀이출처 -> https://st-lab.tistory.com/138)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] dp = new int[N];
int[][] wire = new int[N][2];
StringTokenizer st;
for(int i=0; i< wire.length; i++)
{
st = new StringTokenizer(br.readLine());
wire[i][0] = Integer.parseInt(st.nextToken());
wire[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(wire, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o1[0] - o2[0];
}
});
for(int i=0; i< dp.length; i++)
{
dp[i] = 1;
for(int j=0; j<i; j++)
{
if(wire[i][1] > wire[j][1])
{
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
}
int possible = 0;
for(int i=0; i<N; i++)
{
possible = Math.max(possible, dp[i]);
}
System.out.println(N - possible);
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(Java) > 23년 8월' 카테고리의 다른 글
[Java] 백준 - 1449번: 수리공 항승 (0) | 2023.08.30 |
---|---|
[Java] 백준 - 11279번: 최대 힙 (0) | 2023.08.29 |
[Java] 백준 - 2583번: 영역 구하기 (0) | 2023.08.25 |
[Java] 백준 - 5639번: 이진 검색 트리 (0) | 2023.08.24 |
[Java] 백준 - 1049번: 기타줄 (0) | 2023.08.23 |
댓글