본문 바로가기

PS/백준

[백준 16472번] 고냥이 (파이썬/python)

728x90

https://www.acmicpc.net/problem/16472

 

16472번: 고냥이

고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고

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
import sys
 
input = sys.stdin.readline
 
= int(input())
str1 = str(input().strip())
 
dic = {}
result = [00]
start = 0
end = 0
 
while start < len(str1) and end < len(str1):
 
    if str1[end] not in dic:
        dic[str1[end]] = 1
    else:
        dic[str1[end]] += 1
 
    # 만약 딕셔너리안에 n개보다 더 많은 알파벳이 들어갔을경우
    # start값을 올려서 n개가 되도록 알파벳을 빼줘야한다.
    if len(dic) > n:
        while start <= end and len(dic) > n:
            if dic[str1[start]] == 1:
                dic.pop(str1[start])
            else:
                dic[str1[start]] -= 1
            start += 1
 
    # 만약 연속된 n개의 문자열이 들어왔을경우
    # result안에 최대 길이가 들어갈 수 있도록 넣어준다.
    if len(dic) <= n:
        # 최대길이로 갱신해주자~
        if result[1- result[0< end - start:
            result[0= start
            result[1= end
 
    end += 1
 
print(result[1- result[0+ 1)
 
cs
728x90