현제의 현재이야기

[백준/python] 13022 - 늑대와 올바른 단어 본문

algorithm

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

현재의 현제 2022. 6. 29. 12:36

a = list(input())
pointer = 0
word_cnt = 0
word_cnt_resister = 0

box = ['w','o','l','f']
box_pointer = 0

while pointer < len(a):
    if a[pointer] == box[box_pointer]:
        word_cnt += 1
        pointer += 1
    else:
        box_pointer += 1
        box_pointer = box_pointer % 4

        if a[pointer] != box[box_pointer]:
            print('0')
            quit()
        elif box_pointer >= 2 and word_cnt != word_cnt_resister:
            print('0')
            quit()
        else:
            word_cnt_resister = word_cnt
            word_cnt = 1
            pointer += 1

if box_pointer == 3 and word_cnt == word_cnt_resister:
    print('1')
else:
    print('0')

| 알고리즘

  1. 현재 포인터가 가르키는 알파벳이 박스포인터가 가르키는 알파벳과 같으면 해당 알파벳의 개수를 +1 해주고 포인터 하나 올림
  2. 만약에 다르다면 박스 포인터 하나를 올려서 순서가 맞는지 확인하고 순서가 맞다면 else로 가서 word_cnt를 world_cnt_register에 저장. 그리고 다시 새로운 알파벳이 왔기 때문에 word_cnt를 1로 하고 포인터 하나 증가
  3. 반복 하다가 wolf 중 l로 바뀌었을 때는 elif box_pointer >= 2 and word_cnt != word_cnt_resister: 에 걸리기 때문에 지금 현재 word_cnt(’o’ 일때)와 그 전에 저장해둔 레지스터(’w’ 일때)의 개수를 비교해서 개수가 다르면 quit()
  4. box_pointer가 3이 넘어가면 다시 0으로 바꾸어서 w부터 다시 시작.
  5. while문을 나왔을 때 박스포인터가 3 , 즉 f로 끝나고 l과 f와 개수가 같으면 1 출력

 

너무 애먹었던 문제…!! 그래도 반례가 많아서 수정하면서 코드를 짤 수 있었다. 변수가 너무 많아서 디버깅 할 때도 애먹었는데 그래도 이번 문제에서 컴퓨터 구조나 운영체제 수업이 조금 도움된 기분

Comments