목록Data Structure & Algorithm/PS - JAVA (270)
Dev.baelanche
큐는 인덱스가 없기 때문에 문서를 담을 큐와 우선순위를 담을 배열을 만들어 풀었다. m 번째로 인쇄되는 문서는 this 라는 이름으로 지었다. 큐의 front 가 우선순위가 제일 높으면 pop 하고 그렇지 않으면 push, pop 을 한다. 동시에 동적배열에서도 우선순위가 제일 높으면 remove 하고 그렇지 않으면 add(get(0)), remove(0) 한다. 큐의 front 가 우선순위 최대값이어서 성공적으로 pop 되었을때만 카운트를 늘렸다. 직접 구현한 큐는 제외하고 올리겠다. (큐 소스는 여기에) public static void main(String[] args) { Scanner sc = new Scanner(System.in); Main q = new Main(); int t = sc.n..
큐로 구현하는 문제이다. 1부터 n 까지 큐에 담고 - 첫번째 케이스에 pop 한다. - 두번째 케이스에 pop 하고 pop 된 수를 push 한다. 위 두가지 케이스를 반복하여 큐에 노드가 1개 남을때 출력해주면 된다. 직접 구현한 큐를 썼다. public class Main { Node head; Node tail; int size = 0; class Node { Node prev; Object value; Node(Object value) { this.value = value; } } public void push(Object value) { Node node = new Node(value); if(size == 0) { head = node; tail = node; } tail.prev = nod..
자료구조 중 선입선출의 특징을 가진 큐 문제다. 큐를 문제에 맞게 직접 구현하여 풀었다. public class Main { Node head; Node tail; int size = 0; class Node { Node prev; Object value; Node(Object value) { this.value = value; } } public void push(Object value) { Node node = new Node(value); if(size == 0) { head = node; tail = node; } tail.prev = node; tail = node; size++; } public Object pop() { if(size == 0) return -1; Node temp = hea..
입력한 수 n 에 대하여 n번째 피보나치 수열을 구하면 된다. 점화식은 문제에 나와있는 식대로 하면되고 입력의 최대값이 t
가장 적은 횟수로 순서대로 세우려면 전체 아이의 수 - (가장 큰 증가 수열의 길이) 를 하면된다. 가장 큰 증가 수열의 길이를 구하는 법은 여기에 있다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int c[] = new int[n]; int dp[] = new int[n]; for(int i=0; i
가장 긴 증가하는 부분 수열, 가장 긴 감소하는 부분 수열과 로직이 똑같은 문제이다. 수열의 길이가 아닌 각 수열의 합을 dp 배열에 담으면 된다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n]; int dp[] = new int[n]; for(int i=0; i
가장 긴 감소하는 부분 수열을 먼저 풀고 풀었다. 수열의 수에 대한 크기 비교만 거꾸로 하면 된다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n]; int dp[] = new int[n]; for(int i=0; i
이중 루프로 인덱스를 비교한다. i 10 30 10 20 20 10 j 10 30 10 20 20 10 dp 1 1 2 2 다음을 만족할때 수열의 길이가 1 증가한다. 1. i 가 j 보다 작을 때 2. dp[i] 보다 dp[j] + 1 이 클 때 2번 조건을 만족하지 않으면 앞의 인덱스 중 자신보다 큰 수가 있으면 길이가 무조건 1 증가한다. 수열의 길이는 최소 1이므로 dp 배열의 초기값은 1이다. public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a[] = new int[n]; int dp[] = new int[n]; for(int i=0; i