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
- 전처리
- 코사인유사도
- 깊이우선탐색
- 자연어처리
- xmltodict
- cosine
- 분할정복
- 우선순위큐
- 너비우선탐색
- 그래프이론
- NLP
- 백준
- 수학
- geopy
- TF-IDF
- GroupBy
- dp
- 구현
- pandas
- 재귀
- 그래프탐색
- 유클리드
- 공공데이터
- Geocoding
- 지진대피소
- 비트마스킹
- 누적합
- 건축물대장정보
- 유사도
- 그리디
Archives
- Today
- Total
정리용
[백준 5525] 파이썬 - ioioi 본문
https://www.acmicpc.net/problem/5525
5525번: IOIOI
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇
www.acmicpc.net
1. 코드설명
# 50점
n = int(input())
m = int(input())
s = input()
i = 0
count = 0
pn = 'IO'*n + 'I'
while i < m - len(pn) :
if s[i:i+2*n+1] == pn :
i += 2
count += 1
else:
i += 1
print(count)
# 100점
n = int(input())
m = int(input())
s = input()
answer = 0
i = 0
count = 0
while i <= m:
if s[i:i+3] == 'IOI':
i += 2
count += 1
if count == n: # ioi 반복이 pn에 도달했을 경우
answer += 1
count -= 1
else:
i += 1
count = 0
print(answer)
2. 주의사항
pn의 문자열을 직접 생성하고 s 문자열의 인덱스마다 비교하는 1번 방법은 n이 커지면 시간초과가 발생한다
따라서 pn은 ioi 의 조합임을 활용하여 시간복잡도 문제를 해결한다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 9095] 파이썬 - 1,2,3 더하기 (0) | 2022.01.03 |
---|---|
[백준 7662] 파이썬 - 이중순위 (0) | 2022.01.01 |
[백준 1992] 파이썬 - 쿼드트리 (0) | 2021.12.27 |
[백준 1780] 파이썬 - 종이의 개수 (0) | 2021.12.24 |
[백준] (0) | 2021.12.20 |
Comments