[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