문제 링크 : https://cote.inflearn.com/contest/10/problem/03-06
** 내가 처음 푼 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.*;
import java.util.stream.Stream;
import java.io.*;
class Solution{
static int n,m,k;
static StringTokenizer st;
static StringBuilder sb;
public static void main(String[] args)throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int start=0;
int max=0;
int cnt=0;
for(int i=0; i<n; i++) {
if(arr[i]==0)cnt++;
if(cnt>m) {
while(arr[start]!=0) {
start++;
}
start++;
cnt--;
}
}
System.out.println(max);
br.close();
bw.close();
}
}
|
- 2개의 포인터를 옮겨가며, Right 포인터가 배열의 0을 만나면 count를 증가해주는 방식으로 최대 개수를 맞춤
- 하지만 left 포인터를 어떻게 사용해야 할지 감이 안잡힘
- 그래서 카운터가 최대치를 넘었다면, while문을 통해 0을 만날때까지 start 포인터의 위치를 변경
- 이후 한번 더 추가하고 cnt를 1개 내림
** 변경된 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import java.util.*;
import java.util.stream.Stream;
import java.io.*;
class Solution{
static int n,m,k;
static StringTokenizer st;
static StringBuilder sb;
public static void main(String[] args)throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
int[] arr = new int[n];
for(int i=0; i<n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int start=0;
int max=0;
int cnt=0;
for(int i=0; i<n; i++) {
if(arr[i]==0)cnt++;
while(cnt>m) {
if(arr[start++]==0)cnt--;
}
max = Math.max(max, i-start+1);
}
System.out.println(max);
br.close();
bw.close();
}
}
|
cs |
- if문을 사용 안하고, while에서의 true, false를 기반으로 바로 검증하여 코드가 조금 더 간결해짐.
'알고리즘 > 인프런(자바(Java) 알고리즘 문제풀이 입문' 카테고리의 다른 글
5-8 응급실(Queue) (1) | 2024.01.09 |
---|---|
5-6 공주 구하기 (1) | 2024.01.07 |
4-5 K번째 큰 수 (0) | 2024.01.07 |
4-4 모든 아나그램 찾기(Sliding Window, HashMap) (0) | 2024.01.06 |
4-3 매출액의 종류(Hash, Sliding Window) (1) | 2024.01.06 |