현제의 현재이야기
[백준/python] 13022 - 늑대와 올바른 단어 본문
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 해주고 포인터 하나 올림
- 만약에 다르다면 박스 포인터 하나를 올려서 순서가 맞는지 확인하고 순서가 맞다면 else로 가서 word_cnt를 world_cnt_register에 저장. 그리고 다시 새로운 알파벳이 왔기 때문에 word_cnt를 1로 하고 포인터 하나 증가
- 반복 하다가 wolf 중 l로 바뀌었을 때는 elif box_pointer >= 2 and word_cnt != word_cnt_resister: 에 걸리기 때문에 지금 현재 word_cnt(’o’ 일때)와 그 전에 저장해둔 레지스터(’w’ 일때)의 개수를 비교해서 개수가 다르면 quit()
- box_pointer가 3이 넘어가면 다시 0으로 바꾸어서 w부터 다시 시작.
- while문을 나왔을 때 박스포인터가 3 , 즉 f로 끝나고 l과 f와 개수가 같으면 1 출력
너무 애먹었던 문제…!! 그래도 반례가 많아서 수정하면서 코드를 짤 수 있었다. 변수가 너무 많아서 디버깅 할 때도 애먹었는데 그래도 이번 문제에서 컴퓨터 구조나 운영체제 수업이 조금 도움된 기분
'algorithm' 카테고리의 다른 글
[백준/python] 2002 - 추월 (0) | 2022.07.06 |
---|---|
[백준/python] 18115 - 카드놓기 (0) | 2022.07.05 |
[백준/python] 12789 - 도키도키 간식드리미 (0) | 2022.06.29 |
[백준/python] 16918 - 봄버맨 (0) | 2022.06.25 |
[백준/python] 17952 - 과제는 끝나지 않아 (0) | 2022.06.25 |
Comments