반응형
🔺 문제
20922번: 겹치는 건 싫어
홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 $K$개 이하로 들어 있는 최장 연속 부분 수열
www.acmicpc.net
🔺 코드
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
39
40
41
42
43
44
45
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] A = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N ; i++) {
A[i] = Integer.parseInt(st.nextToken());
}
int result = 0; // 같은 정수를 K개 이하로 포함한 최장 연속 부분 수열 길이
int left = 0;
int right = 0;
int[] counting = new int[100001]; // 카운팅 배열 !
// 수열 탐색하면서 각 원소가 몇 개 있는지 카운트
while(left <= right) {
// 길이 늘릴 수 있는 경우
if(right <= N - 1 && counting[A[right]] < K) {
counting[A[right]]++;
right++;
}
// 더 이상 늘릴 수 없는 경우, left 이동
else if(counting[A[right]] == K) {
counting[A[left]]--; // 기존에 left였던 원소의 카운팅 하나 빼기
left++; // left를 오른쪽으로 이동
}
// 더 이상 늘릴 수 없는 경우
result = Math.max(result, right - left);
if(right == N) break;
}
System.out.println(result);
}
}
|
cs |
✅ 해결 아이디어
✔ 투 포인터
- 같은 정수를 K개 이하로 포함한 최장 연속 부분 수열 길이를 구하는 것이므로
카운팅 배열을 생성해 해당 정수의 갯수 구함.
→ right가 K번 사용되지 않아 길이를 늘릴 수 있는 경우, 해당 원소의 사용횟수를 + 1하고, right를 늘려준다.
→ 이미 K번 사용된 경우, 기존에 left였던 원소의 카운팅 갯수를 하나 빼고, left을 오른쪽으로 이동
🔺 다른 풀이들
- while문이 조금 다름
백준 20922 겹치는 건 싫어 (Java,자바)
이번에 풀어본 문제는 백준 20922번 겹치는 건 싫어 입니다.
velog.io
💬 느낀 점
투 포인터를 이렇게...?
복습을 해야겄다..
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 풀이 참고...😅
백준 20922[자바] java 겹치는 건 싫어
문제 링크: https://www.acmicpc.net/problem/20922 20922번: 겹치는 건 싫어 홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를
dingdingmin-back-end-developer.tistory.com
백준 20922번 - 겹치는 건 싫어
문제를 본 순간 투포인터를 사용해야될 것 같다는 느낌이 들었다.어떤 숫자가 몇번이 사용됐는지 체크하는 cnt배열을 사용하면 풀 수 있다.l=0, r=0 부터 시작해서 r번째에 있는 숫자가 k번 미만으
velog.io
반응형
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 2607번: 비슷한 단어 (0) | 2023.08.10 |
---|---|
[백준/JAVA] 10819번: 차이를 최대로 (0) | 2023.08.08 |
[백준/JAVA] 19941번: 햄버거 분배 (0) | 2023.08.07 |
[백준/JAVA] 20920번: 영단어 암기는 괴로워 (0) | 2023.08.07 |
[백준/JAVA] 1302번: 베스트셀러 (0) | 2023.08.06 |