Step-by-Step
[Java] 백준 2565 - 전깃줄 본문
https://www.acmicpc.net/problem/2565
2565번: 전깃줄
첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는
www.acmicpc.net
이미 개수를 구한 부분들을 탐색하면서
1. 현재 노드에 연결된 전깃줄 인덱스 > 이전 노드에 연결된 전깃줄 인덱스
2. 1의 조건을 만족하는 값들중에 연결된 전깃줄의 수가 최대인 경우
이 두 조건을 만족하는 값을 구하고 +1을 해주었다.!
나름 효율성 높인다고 HashMap 사용해서 dp 값 설정해주었다 ㅋㅋ
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
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 ans = 0;
ArrayList<Integer> arr = new ArrayList<>();
HashMap<Integer, Integer> hm = new HashMap<>();
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()), b = Integer.parseInt(st.nextToken());
arr.add(a); hm.put(a, b);
}
Collections.sort(arr);
HashMap<Integer, Integer> dp = new HashMap<>();
for(int i=0; i<N; i++) {
int now = arr.get(i);
int prevN = 0;
for(int j=i-1; j>=0; j--) {
int prev = arr.get(j);
if(hm.get(prev) < hm.get(now))
prevN = Math.max(dp.get(prev), prevN);
}
dp.put(now, prevN+1);
ans = Math.max(ans, prevN+1);
}
System.out.println(N-ans);
}
}
'언어 > JAVA' 카테고리의 다른 글
[Java] Daily LeetCode Challenge 59. Spiral Matrix II (0) | 2023.05.10 |
---|---|
[Java] 백준 14567 - 선수과목 (0) | 2023.05.08 |
LeetCode 1416. Restore The Array (0) | 2023.05.08 |
[Java] 백준 2637 - 장난감 조립 (0) | 2023.04.12 |
[Java] 백준 21611 - 마법사 상어와 블리자드 (0) | 2023.03.22 |
Comments