Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- C++
- 항해99
- til
- 라라벨
- 개발자 취업
- 티스토리챌린지
- ML
- 안드로이드
- flutter getx
- 99클럽
- 백준
- 파이썬 코테
- Flutter
- 코딩테스트
- 코테 파이썬
- 코딩테스트 준비
- DP
- 코테
- 뷰
- c++ 코테
- 오블완
- 알고리즘
- react
- 파이썬
- Python
- Laravel
- 코딩테스트준비
- 개발자취업
- vue
- 플러터
Archives
- Today
- Total
잡다로그
[Python/코테] 백준 20922 겹치는 건 싫어 본문
20922 겹치는 건 싫어
문제 및 조건 설명: https://www.acmicpc.net/problem/20922

알고리즘 설계
💡idea.
시작 인덱스와 끝 인덱스, 두개의 포인터로 배열을 순회하여 문제를 해결할 수 있다.
배열을 전부 검사하기 전까지 미리 중단할 수 없다.
🎲step.
1. 한 칸씩 검사하며 새로운 칸의 등장 횟수를 센다.
2. 등장 횟수가 k번을 초과하는 순간 시작 또는 끝 인덱스를 이동(증가)해준다.
3. 인덱스 변경 시 마다(=한 칸 이동마다) 최대 길이값을 저장해둔다.
4. 끝 인덱스가 배열의 끝에 도달하면 종료한다.
알고리즘 구현
코드 출처: https://kimmeh1.tistory.com/474
import sys
n, k = map(int, input().split())
arr = list(map(int, sys.stdin.readline().split()))
start = 0
end = 0
count_arr = [0] * (max(arr)+1)
answer = 0
while end < n:
# start = end = 0 에서 시작해서, 하나씩 센다.
# end가 앞으로 가며 해당 원소의 카운팅이 증가하고
if count_arr[arr[end]] < k:
count_arr[arr[end]] += 1
end += 1
else:
# start가 앞으로 갈 때 원소의 카운팅이 감소한다.
count_arr[arr[start]] -= 1
start += 1
answer = max(answer, end - start)
print(answer)
나다어
- 배열의 순회가 필요할 때, 한 칸씩 검사하는 것이 제일 효율적일 수도 있다.
'Algorithm' 카테고리의 다른 글
| [Python/코테] 백준 13413 오셀로 재배치 (0) | 2024.04.02 |
|---|---|
| [Python/코테] 백준 12933 오리 (0) | 2024.04.02 |
| [Python/코테] 백준 14888 연산자 끼워넣기 (1) | 2024.04.01 |
| [Python/코테] 백준 2407 조합 (0) | 2024.04.01 |
| [Python/코테] 백준 10158 개미 (1) | 2024.03.29 |
Comments