백준 병사 배치하기

업데이트:

병사 배치하기

LIS(최장 길이 부분수열) 문제이다. ArrayList로 받아 방향을 변경 해 내림차순으로 바꿔 메모아이제이션으로 배치 최대값을 구하고 N에서 뺀다. 시간 복잡도가 O(N^2)롷 구현했고 O(NlogN)로 더 빠른 풀이법이 있다는데 패스.. 다른 블로그를 참고했다. dp는 너무 어렵다..

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int N = sc.nextInt();
		
		List<Integer> soldiers  = new ArrayList<>();
		
		for(int i = 0; i < N; i++) {
			soldiers.add(sc.nextInt());
		}
		
		Collections.reverse(soldiers);
	
		int[] dp = new int[N];
		
		Arrays.fill(dp, 1);
		
		
		for(int i = 1; i < N; i++) {
			for(int j = 0; j < i; j++) {
				if(soldiers.get(i) > soldiers.get(j)) {
					dp[i] = Math.max(dp[i], dp[j] + 1);					
				}
			}
		}
		
		int maxValue = 0;
		
		for(int i = 0; i < N; i++) {
			maxValue = Math.max(maxValue, dp[i]);
		}
	}

}

댓글남기기