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
57 changes: 57 additions & 0 deletions Lee-JoungHyun/BOJ_15961.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_15961 {
static int N, c, k, d, arr[];
static int[] visit = new int[3001];

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
d = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}

int cnt = 0;
int start = 0;
int end = k;
int answer = 1;

for (int i = 0; i < end; i++) {
if (visit[arr[i]] == 0) {
cnt++;
}
visit[arr[i]]++;
}
visit[c] += 1;
// 전에 C가 있었음 = cnt에 반영이 되어있음
answer = visit[c] > 1 ? cnt : ++cnt;
//System.out.println("0, 4 -> " + answer);
while (start <= N-1) {

if (--visit[arr[start]] == 0) {
cnt--;
}
end++;
if (visit[arr[(end - 1) % N]] == 0) {
cnt++;
}
visit[arr[(end - 1) % N]]++;
start++;

answer = Math.max(answer, cnt);
//System.out.println(start + ", " + end + " -> " + answer + "-" + cnt);
if (answer == k+1)
break;
}
System.out.println(answer);
}
}
61 changes: 61 additions & 0 deletions Lee-JoungHyun/BOJ_18866.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class BOJ_18866. {

public static void main(String[] args) throws Exception{

final int MAX = 1_000_000_001;
final int MIN = -1;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;

int N = Integer.parseInt(br.readLine());

int[][] arr = new int[N + 1][2];

int[] minHappyLeft = new int[N + 2]; // 구간 1 ~ index의 최소 행복도
int[] maxHappyRight = new int[N + 2]; // 구간 index ~ N의 최대 행복도

int[] maxFatigueLeft = new int[N + 2]; // 구간 1 ~ index의 최대 피로도
int[] minFatigueRight = new int[N + 2]; // 구간 index ~ N의 최소 피로도


minHappyLeft[0] = MAX;
maxHappyRight[N + 1] = MIN;
maxFatigueLeft[0] = MIN;
minFatigueRight[N + 1] = MAX;

for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());

if(arr[i][0] != 0) minHappyLeft[i] = Math.min(minHappyLeft[i - 1], arr[i][0]);
else minHappyLeft[i] = minHappyLeft[i - 1];
if(arr[i][1] != 0) maxFatigueLeft[i] = Math.max(maxFatigueLeft[i - 1], arr[i][1]);
else maxFatigueLeft[i] = maxFatigueLeft[i - 1];
}

for (int i = N; i >= 1; i--) {
if(arr[i][0] != 0) maxHappyRight[i] = Math.max(maxHappyRight[i + 1], arr[i][0]);
else maxHappyRight[i] = maxHappyRight[i + 1];
if(arr[i][1] != 0) minFatigueRight[i] = Math.min(minFatigueRight[i + 1], arr[i][1]);
else minFatigueRight[i] = minFatigueRight[i + 1];
}

for (int i = N - 1; i >= 1; i--) {
// 1 ~ i년까지의 최소 행복도가 i+1 ~ N년의 최대 행복도보다 커야하며,
// 1 ~ i년까지의 최대 피로도가 i+1 ~ n년의 최소 피로도보다 작아야 한다.
if(minHappyLeft[i] >= maxHappyRight[i + 1] && maxFatigueLeft[i] <= minFatigueRight[i + 1]) {
System.out.println(i);
return;
}
}

// 찾지 못한 경우
System.out.println(-1);
}
}