https://www.acmicpc.net/problem/16472
16472번: 고냥이
고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고
www.acmicpc.net
간단한 두 포인터 문제이다.
첫 포인터 위치를 0번째, 1번째 인덱스로 잡은 후 var 변수를 이용하여 알파벳 종류 수를 센다.
이후 check 배열에 각각 인덱스마다 알파벳이 나올 때 마다 값을 증가시켜 갯수를 세며 temp를 증가시킨다.
우측 포인터를 증가시키다가 알파벳 종류가 n을 넘어가는 경우 우측 포인터를 멈추고
좌측 포인터가 가리키는 인덱스의 check 값이 0이 될 때 까지 좌측 포인터를 증가시키고 temp를 감소시킨다.
우측포인터를 증가시킬 때 마다 max 함수를 이용해 answer에 최댓값을 저장한다.
import sys
input = sys.stdin.readline
def sti(num):
return int(ord(cat[num])-97)
n = int(input())
cat = str(input().strip())
if len(cat) <= n:
print(len(cat))
else:
answer = 0
check = [0] * 26
l = 0
r = 1
check[sti(l)] += 1
var = 1
if check[sti(r)] == 0:
var += 1
check[sti(r)] += 1
temp = 2
r += 1
while r < len(cat):
if check[sti(r)] == 0:
var += 1
check[sti(r)] += 1
temp += 1
while var > n:
check[sti(l)] -= 1
if check[sti(l)] == 0:
var -= 1
l += 1
temp -= 1
r += 1
answer = max(answer, temp)
print(answer)
'백준(BOJ)' 카테고리의 다른 글
[Python/파이썬] - 백준(BOJ) 1826번 : 연료 채우기 (0) | 2022.05.07 |
---|---|
[Python/파이썬] - 백준(BOJ) 3109번 : 빵집 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 23254번 : 나는 기말고사형 인간이야 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 1182번 : 부분수열의 합 (0) | 2022.05.07 |
[Python/파이썬] - 백준(BOJ) 3665번 : 최종 순위 (0) | 2022.05.07 |