https://www.acmicpc.net/problem/5525
문자열을 평소에 많이 다루어봤다면 무난하게 해결할 수 있을만한 문제라고 생각한다.
(필자는 많이 안다뤄봐서 개인적으로 어려웠음)처음에는 P 리스트를 만들어서 S에서 I가 나올때마다 비교하는 방식으로 구현한 결과 50점이 나왔다.그렇게 코드를 짜면, 똑같은 부분도 계속 확인해야하기 때문에 시간이 상당히 오래걸린다.
문자열을 다루는 문제는 문자열의 특징을 찾는 것이 상당히 중요한것 같다.P를 보면 N = 1이면 IOI가 1개이고, N = 2이면 IOI 가 두번나온다. 이 규칙을 이용하여 굳이 P리스트를 만들지 않고도 문자열 길이만큼의 탐색으로 문제를 해결할 수 있다.(문자열을 처음부터 스캔하면서 한번에 다 찾는다는 뜻)
코드를 보면 알겠지만 IOI의 개수를 세면서 P문자열이 완성되는지 확인하였다.코드는 다음과 같다.
import sys
input = sys.stdin.readline
def Sol():
N = int(input())
M = int(input())
S = list(input().rstrip())
IOI = 0
idx = 0
cnt = 0
while idx < M - 2:
if S[idx] == 'I' and S[idx+1] == 'O' and S[idx+2] == 'I':
IOI += 1
if IOI == N:
cnt += 1
IOI -= 1
idx += 1
else:
IOI = 0
idx += 1
print(cnt)
if __name__ == "__main__":
Sol()
문자열을 어떻게 다뤄야하는지 알려주는 문제이다.
글이나 코드에 대한 조언 모두 환영합니다!
'📚알고리즘 > 백준' 카테고리의 다른 글
[백준 24511번] queuestack (Python/파이썬) (0) | 2023.02.23 |
---|---|
[백준 1715번] 카드 정렬하기 (Python/파이썬) (0) | 2023.02.22 |
[백준 7576번] 토마토 (Python/파이썬) (0) | 2023.02.19 |
[백준 1012번] 유기농 배추 (Python/파이썬) (0) | 2023.02.18 |
[백준 2178번] 미로 탐색 (Python/파이썬) (0) | 2023.02.18 |