[2022. 02. 22 품]
inp = list(input())
quack = ['q','u','a','c','k']
len_inp = len(inp)
idx = 0
answer = 0
visited = [False] * len_inp
first = False
if len_inp % 5 != 0 or inp[0] != "q":
print(-1)
exit()
for a in range(len_inp):
if inp[a] == "q" and not visited[a]: # 방문하지 않았고, q인 곳 -> 시작 구간이다.
first = True
for i in range(len_inp):
if not visited[i] and quack[idx] == inp[i]:
visited[i] = True
if inp[i] == "k":
if first:
answer += 1
first = False
idx=0
continue
idx += 1
if answer == 0 or not all(visited):
print(-1)
else:
print(answer)
예시 ) q u q a c u k q a u a c k c k
첫 번째 오리)
_ _ q _ _ u _ _ a _ _ _ _ c k
> quackquack
두 번째 오리 )
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
> quack
-> 총 2 마리
(방법 정리)
1. 문장의 길이가 5로 나누어 떨어지지 않으면?
> 잘못된 경우니까 -1 출력
2. 문장 맨 앞에 있는 문자가 q가 아닌 경우?
-> 잘못된 경우니까 -1 출력
3. 위 조건을 모두 만족하면? 이제 탐색을 시작한다
1) q로 시작했는지 체크
2) k로 끝나는지 체크
duck=input()
word = ['q', 'u', 'a', 'c', 'k']
visited = [False] * len(duck)
cnt = 0
idx = 0
if len(duck) % 5 != 0:
print(-1)
else:
for a in range(len(duck)):
if duck[a] == 'q' and not visited[a]:
first = True
for i in range(len(duck)):
if word[idx] == duck[i] and not visited[i]:
visited[i] = True
if duck[i] == 'k':
if first:
cnt += 1
first = False # quack 한 사이클 돌았으니 first는 다시 False로
idx = 0 # quack 인덱스도 0으로 다시 초기화, quack 처음부터 돌아야하니까
continue
idx += 1
# idx 가 quack 인덱스 저장하는 변수!
if cnt == 0 or not all(visited):
print(-1)
else:
print(cnt)
- 문자열 인덱싱
word = 'quack'
word[0] = 'q'
word.index('q') -> 0
- 문자열 슬라이싱
word[:5] = quack
word[1:5] = uack
word[:] = quack
word[2:-1] = qck
-> word[2]~word[-1]까지
코드 참고 출처
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[Python] n4396 | 지뢰찾기 (0) | 2021.05.05 |
---|---|
[Python] n2578번 | 빙고 (0) | 2021.05.03 |
[Python] n14467 | 소가 길을 건너간 이유 1 (0) | 2021.04.29 |
[Python] n1913 | 달팽이 (0) | 2021.04.29 |
[Python] n20546 | 기적의 매매법 (0) | 2021.04.27 |