본문 바로가기
백준/출제한 문제들

[백준] 25822번 : 2000문제 푼 임스

by lms0806 2022. 10. 25.
728x90
반응형

https://www.acmicpc.net/problem/25822

 

25822번: 2000문제 푼 임스

이 문제는 문제 출제를 위해 꾸준히 문제를 풀어 2000문제 풀이를 달성한 임스가 처음으로 출제한 문제입니다. 임스는 문제 출제를 위해 매일 0 ~ 24문제를 풀었습니다. 임스가 스트릭을 끊기지 않

www.acmicpc.net

2000문제 solve 기념 출제진 자격 조건에 달성하여 출제하게 된 문제입니다.

제가 지금까지 백준 문제를 풀면서 최소와 최대로 풀었던 문제수를 그대로 문제에 녹였고, 추천을 받아 solved의 스트릭 프리즈 기능을 사용해 보았습니다.

주어진 날 이전과 이후는 스트릭이 유지중이지만, 주어진 날짜의 스트릭 유지일수만 출력하면 되는 문제입니다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
		
		int coincount = Math.min((int) (Double.parseDouble(br.readLine()) / 0.99), 2);
		
		int n = Integer.parseInt(br.readLine());
		
		int[] arr = new int[n];
		int[][] dp = new int[n][coincount + 1];
		
		int maxsolve = 0;
		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int i = 0; i < n; i++) {
			maxsolve = Math.max(maxsolve, arr[i] = Integer.parseInt(st.nextToken()));
		}
		
		dp[0][0] = arr[0] > 0 ? 1 : 0;
		if(dp[0][0] == 0 && coincount != 0) {
			dp[0][1] = 1;
		}
		for(int i = 1; i < n; i++) {
			if(arr[i] > 0) {
				for(int j = 0; j < dp[i].length; j++) {
					dp[i][j] = dp[i - 1][j] + 1;
				}
			}
			else {
				for(int j = 1; j < dp[i].length; j++) {
					dp[i][j] = dp[i - 1][j - 1] + 1;
				}
			}
		}
		
		int answer = 0;
		for(int i = 0; i < n; i++) {
			for(int d : dp[i]) {
				answer = Math.max(answer, d);
			}
		}
		System.out.print(answer + "\n" + maxsolve);
	}
}
728x90
반응형

댓글