728x90
https://www.acmicpc.net/problem/13022
문자열은 파이썬이 편하다.
마지막에 f가 있을거라 예상해서 f를 기준으로 단어를 나눴다(인덱스만 저장).
그리고 각각의 인덱스를 기준으로 4의 배수인지 확인하면 wwwoolllfff 같이 중간에 하나 빠져있는 단어들을 제거할수 있다.
그다음은 wlof 와 같은 단어를 제거한다. 나누어진 단어의 길이를 4로 나누면 한 단어당 나와야하는 알파벳의 갯수가 나온다. 이 개수로 wolf 각각 문자열을 곱하고 더해서 단어를 만들고 원래 기존의 단어와 비교하면 제거할수 있다.
여기까지가 끝인줄 알았으나 oo같은 f가 아예 없는 문자열들을 인식하지 못했다. 그래서 마지막 인덱스를 하나더 추가했고 해결할수 있었다.
def check(word, start, end):
length = (end - start + 1) // 4
new_word = 'w' * length + 'o' * length + 'l' * length + 'f' * length
if word[start:end+1] == new_word:
return True
return False
def main():
word = input()
# 1 split words
f_index = []
for i in range(len(word)):
if word[i] == 'f' and (i == len(word) - 1 or word[i + 1] != 'f'):
f_index.append(i)
f_index.append(len(word) - 1)
prev = 0
for idx, f_ind in enumerate(f_index):
# check 4*n each split word
if (f_ind + 1) % 4:
print(0)
return
# word is right
if not check(word, prev, f_ind):
print(0)
return
prev = f_ind + 1
print(1)
if __name__ == '__main__':
main()
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2745 진법 변환 python (0) | 2022.01.18 |
---|---|
[백준] 1072 게임 python (0) | 2022.01.17 |
[백준] 5582 공통부분 문자열, python(pypy) (0) | 2022.01.17 |
[백준] 2805 나무자르기 python (0) | 2022.01.16 |
[백준] 10819 차이를 최대로 python (0) | 2022.01.15 |