Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions 2025-02-15/p_11053.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package study.d_250215;

import java.util.*;
import java.io.*;

/**
*
*/
public class p_11053 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());
int arr[] = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());

for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}

int[] D = new int[n]; // arr의 i 번째 요소 보다 작으면서 D의 요소중 가장 큰 값의 다음 값을 저장

for (int i = 0; i < n; i++) {
D[i] = 0;

int max = D[i];
for (int j = 0; j < i; j++) {
if (arr[i] > arr[j] && max < D[j]) { // i 번째 요소보다 작으면서, D의 요소 중 가장 큰값
max = D[j];
}
}

D[i] = max + 1;
}

int length = 0;
for (int i = 0; i < n; i++) {
if (length < D[i]) length = D[i];
}

bw.write(length + "");

br.close();
bw.close();
}
}
63 changes: 63 additions & 0 deletions 2025-02-15/p_14002.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package study.d_250215;

import java.util.*;
import java.io.*;

public class p_14002 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());

// 배열 초기화
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}

int[] D = new int[n]; // D 배열 구하기

int max = 0; // 부분 수열 중 가장 큰 수열의 길이
int maxIdx = 0; // 가장 큰 값의 인덱스 저장

for (int i = 0; i < n; i++) {
D[i] = 0;
int length = D[i];
for (int j = 0; j < i; j++) {
if (arr[j] < arr[i] && length < D[j]) length = D[j];
}
D[i] = length + 1;

if (max < D[i]) {
max = D[i];
maxIdx = i;
}
}


int idx = maxIdx;
ArrayList<Integer> list = new ArrayList<>(); // 가장 긴 수열을 저장할 리스트 (역순으로 저장)
list.add(arr[idx]);

while (D[idx] - 1 > 0) {
for (int i = 0; i < idx; i++) {
if (arr[i] < arr[idx] && D[i] == (D[idx] - 1)) { // arr의 idx 요소보다 작으면서, D의 idx 요소보다 1 작은 값
list.add(arr[i]);
idx = i;
break;
}
}
}

// 역순으로 출력
bw.write(max + "\n");
for (int i = list.size() - 1; i >= 0; i--) {
bw.write(list.get(i) + " ");
}

br.close();
bw.close();
}
}
39 changes: 39 additions & 0 deletions 2025-02-15/p_1912.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package study.d_250215;

import java.util.*;
import java.io.*;

/**
* 3중
*/
public class p_1912 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());
int arr[] = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());

for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}

int max = arr[0];
for (int size = 1; size <= n; size++) {
for (int j = 0; j < n - size + 1; j++) {
int sum = 0;
for (int k = j; k < j + size; k++) {
sum += arr[k];
}
if (sum >= max) max = sum;
}
}

bw.write(max + "");
br.close();
bw.close();
}


}
47 changes: 47 additions & 0 deletions 2025-02-15/p_1912_2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package study.d_250215;

import java.io.*;
import java.util.StringTokenizer;

/**
* 2중 (누적합과 차를 이용한 방식)
*/
public class p_1912_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());

for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}

int[] sumArr = new int[n];

// 0 ~ i 누적합 구하기
int max = arr[0];
for (int i = 0; i < n; i++) {
int sum = 0;
for (int s = 0; s < i + 1; s++) {
sum += arr[s];
}
sumArr[i] = sum;
if(max < sum) max = sum;
}
// i번째 누적합에서 각각 0 ~ j 만큼의 차 구하기
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
int diff = sumArr[i] - sumArr[j];
if(max < diff) max = diff;
}
}

bw.write(max+"");

br.close();
bw.close();
}
}
48 changes: 48 additions & 0 deletions 2025-02-15/p_1912_3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package study.d_250215;

import java.util.*;
import java.io.*;

/**
* 1중 (다이내믹 방식)
*/
public class p_1912_3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());

int[] arr = new int[n];
// 배열 초기화
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}

int[] D = new int[n]; // 이전 요소를 더할 것인지, 아니면 홀로 설 것인지 결정하여 저장

for (int i = 0; i < n; i++) {
if (i == 0) D[i] = arr[i]; // D[0] 초기화

if (i >= 1) {
if (arr[i] > (D[i - 1] + arr[i])) { // 홀로 서는 것이 클 경우 더하지 않음
D[i] = arr[i];
} else { // 합치는 게 클 경우 더함
D[i] = D[i - 1] + arr[i];
}
}
}

// 최댓값 찾기
int max = D[0];
for (int i = 0; i < n; i++) {
if (max < D[i]) max = D[i];
}

bw.write(max + "");

br.close();
bw.close();
}
}