✔ 내 답-> 이상핟..
import java.util.*;
public class P3_6 {
public static int solution(int n, int k, int[] arr){
int cnt=0, i=0,p=0,max=0,zero=0;
while(i<n-1){
if(zero==k) {
while(arr[i]==1){
cnt++;
i++;
}
if(max<cnt) max=cnt;
System.out.println("max="+max);
cnt=0;
zero=0;
if(k>1) i=p;
}
else if(zero<k){
if(arr[i]==0){
zero++;
if(zero==2) p=i;
}
i++;
cnt++;
}
}
return max;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n; i++){
arr[i]=kb.nextInt();
}
System.out.println(solution(n, k, arr ));
}
}
✔️ 강의 조금 듣고 힌트 얻어서 풀어본 결과
뭔가 컴퓨터가 접근하기 편한 간단한 방법을 고안해내는 연습이 필요한 거 같다.
최적의 최적의 방법을 찾는 것보다는
최적의 방법 안에서 단순하게 가는 것이다.
최적의 최적의 방법은 인간 머리로 생각하는 것이라 방법이 더 복잡해지고 중간에 많은 if문과 변수 선언들이 생기기 때문에 더 복잡해진다.
import java.util.*;
public class Main {
public static int solution(int n, int k, int[] arr){
int lt =0, rt=0, answer = 0, cnt=0, first=0;
int zero=0;
while(rt<n) {
if(zero<k) {
if(arr[rt]==0) {
zero++;
if(zero==1) first=rt+1;
}
rt++;
}
else if(zero==k){
if(arr[rt]==0) {
cnt=rt-lt;
zero=0;
if(answer<cnt) answer = cnt;
lt=first;
rt=first;
}
else {
rt++;
}
}
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n; i++){
arr[i]=kb.nextInt();
}
System.out.println(solution(n, k, arr ));
}
}
✔️강의 답
import java.util.*;
public class Main {
public static int solution(int n, int k, int[] arr){
int lt =0,rt=0, cnt=0, answer=0,length=0;
while(rt<n) {
if(cnt<k) {
if(arr[rt]==0) cnt++;
length=rt-lt+1;
if(length>answer) answer=length;
rt++;
} else if(cnt==k){
if(arr[rt]==1) {
length=rt-lt+1;
if(length>answer) answer=length;
rt++;
} else cnt++;
} else {
while(arr[lt]==1) {
lt++;
}
if(arr[lt]==0) {
lt++;
cnt--;
length=rt-lt+1;
if(length>answer) answer=length;
rt++;
}
}
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n; i++){
arr[i]=kb.nextInt();
}
System.out.println(solution(n, k, arr ));
}
}
import java.util.*;
public class Main {
public static int solution(int n, int k, int[] arr){
int lt =0, cnt=0, answer=0;
for(int rt=0;rt<n;rt++) {
if(arr[rt]==0) cnt++;
while(cnt>k) {
if(arr[lt]==0)cnt--;
lt++;
}
answer = Math.max(answer, rt-lt+1);
}
return answer;
}
public static void main(String[] args){
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
int[] arr = new int[n];
for(int i=0;i<n; i++){
arr[i]=kb.nextInt();
}
System.out.println(solution(n, k, arr ));
}
}