반응형
https://www.acmicpc.net/problem/5525
def check():
global state, start
cnt = 0
while start < m:
if state == 1:
if s[start] == 'I':
state = 0
start += 1
cnt += 1
else:
start += 1
return cnt
else:
if s[start] == 'O':
state = 1
start += 1
else:
state = 1
return cnt
return cnt
n = int(input())
m = int(input())
s = input()
state = 1
ans = 0
start = 0
while start < m:
cnt = check()
if cnt - n < 0:
ans += 0
else:
ans += cnt - n
print(ans)
문제를 풀다가 마음이 급해져서 반례를 많이 생각하지 못한게 해당 문제를 푸는데 가장 큰 고난이었습니다. 처음에는 문제가 시키는대로 p를 만들고 I가 나오면 p랑 비교하는 방식으로 풀었는데 50점이 나와서 다른 방법을 생각하다가 답이 조건에 맞을 경우 I의 갯수 - n 이라는 것을 알아차려서 그렇게 해서 풀려고 했는데 IOOOO같은 경우는 생각을 했었는데 n이 커서 IOIOIO가 잘 나오더라도 p보다 짧을 수 있다는 사실을 생각을 못해서 그걸로 고민을 엄청 했네요.
문제의 접근은 state라는 변수를 만들어서 지금 차례가 I인지 O인지를 구분할 수 있도록 해서 순서가 맞다면 state를 변경하고 반복을, 아니라면 I의 갯수를 반환해서 연산 이후 ans를 증가시킵니다. 다만 위에서 말했던 대로 아무리 잘 나왔더라도 p에 비해서 짧은 경우가 있을수도 있기 때문에 cnt - n 이 음수인 경우에는 ans를 증가시키면 안됩니다. 글을 쓰고 있으니 불필요한 부분이 많이 보입니다만 이 문제 때문에 아직 운동을 못가서 빨리 운동부터 하고 와야겠어요.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]11286번 풀이 (0) | 2022.07.07 |
---|---|
[BOJ][Python]6064번 풀이 (0) | 2022.07.06 |
[BOJ][Python]2667번 풀이 (0) | 2022.07.04 |
[BOJ][Python]5338, 25083번 풀이 (0) | 2022.07.03 |