[SW Expert Academy, SWEA 10507] 영어 공부 (java)
Problem Solving/SWEA

[SW Expert Academy, SWEA 10507] 영어 공부 (java)

728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXNQOb3avD0DFAXS&categoryId=AXNQOb3avD0DFAXS&categoryType=CODE&problemTitle=10507&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

728x90

메모리: 92,296 KB, 시간: 412 ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
int[] days = new int[n];
for (int i = 0; i < n; i++) days[i] = Integer.parseInt(st.nextToken());
int ans = 0;
for (int i = 0; i < n ; i++) { // i := 시작일의 인덱스
int s = i, e = n - 1;
while(s <= e) {
int mid = (s + e) / 2; // 가능성이 있는 날의 인덱스
int blank = (days[mid] - days[i] + 1) - (mid - i + 1);
if(blank > p) e = mid - 1;
else {
ans = Math.max(ans, (days[mid] - days[i] + 1) + (p - blank));
s = mid + 1;
}
}
}
sb.append("#" + tc + " " + ans + "\n");
}
System.out.println(sb);
}
}
728x90