STUDY/Algorithm

[백준] 13022 늑대와 올바른 단어, python

sinawi95 2022. 1. 17. 12:18
728x90

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

 

13022번: 늑대와 올바른 단어

첫째 줄에 단어가 주어진다. 단어는 w, o, l, f로만 이루어져 있으며, 길이는 50을 넘지 않는다.

www.acmicpc.net

문자열은 파이썬이 편하다.

마지막에 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()