소스 코드
T = int(input())
for tc in range(1,1+T):
# 울음소리
arr = list(str(input()))
# 모든 문자 사용했는지 확인을 위한 배열
visited = [0 for _ in range(len(arr))]
# 개구리 최소 숫자
res = -1
# 한 번의 울음 안에 c가 몇 번 있는가(겹치게 우는 것이 몇 마리인가)
cnt = 0
# 시작 위치(c 부터 시작)
idx = 0
while True:
# 임시 cnt(몇 마리인지), 초기화
temp = 0
# 임시 idx, 초기화
temp_idx = 0
# 울음소리 저장, 초기화
word = ''
# 시작 값이 c가 아니면 불가능함
if arr[idx] != 'c':
break
else:
for q in range(idx, len(arr)):
if arr[q] == 'c':
# word가 '' 이면
# c로 만들고, 방문처리
if len(word) == 0:
word += arr[q]
visited[q] = 1
# word가 ''이 아니면
# temp_idx에 저장된 값이 없으면 q 저장
else:
if temp_idx == 0:
temp_idx = q
# 몇 마리인지 세기
temp += 1
# word가 c인 경우
elif arr[q] == 'r' and len(word) == 1 and visited[q] == 0:
word += arr[q]
visited[q] = 1
# word가 cr인 경우
elif arr[q] == 'o' and len(word) == 2 and visited[q] == 0:
word += arr[q]
visited[q] = 1
# word가 cro인 경우
elif arr[q] == 'a' and len(word) == 3 and visited[q] == 0:
word += arr[q]
visited[q] = 1
# word가 croa인 경우
elif arr[q] == 'k' and len(word) == 4 and visited[q] == 0:
word += arr[q]
visited[q] = 1
# 만일 arr[0:5]의 값이 croak인 경우
# temp_idx 값이 변하지 않아서 계속 0번에서 시작함
# 그런 경우를 방지하기 위해 temp_idx 값에 q+1 저장
if temp_idx == 0:
temp_idx = q+1
break
# 배열을 끝까지 다 돌았을 때,
if q == len(arr) - 1:
# word가 croak를 완성하지 못하면
if word != 'croak':
break
# visited의 값이 모두 1일 때
# res에 cnt값 저장
if visited.count(1) == len(arr):
res = cnt
break
# 아닌 경우 그냥 종료
else:
break
# 배열을 끝까지 돌지 않았을 경우
else:
# temp가 cnt값보다 크면 cnt에 temp값 저장
if temp > cnt:
cnt = temp
# idx에 temp_idx값 저장
idx = temp_idx
print('#{} {}'.format(tc,res))
해결 방법
1. 주어진 울음소리 배열(arr)을 끝까지 다 돌면서 croak를 확인
2. 시작 값은 무조건 c
3. croak 문자열은 완성시켜가는 중에 다른 c를 만나면 idx 값을 저장
4. 이후, 기존의 croak를 끝마치면 저장해둔 idx로 돌아가서 다시 시작
5. 반복 및 croak를 완성시켜가는 중에 다른 c(시작점)을 만나지 않는 경우 따로 처리
느낀 점
1. 코드의 수를 줄일 수 있는 방법을 고민해 봐야 함
ex) c,r,o,a,k 일일이 검사하는 방식이 아닌 다른 방식
2. 이렇게 모든 변수를 직접 처리하는 것은 비효율적이고, 실패할 가능성이 높다고 생각함
(물론 출제자의 의도가 이런 형태일 수도 있지만, 그냥 내 생각에는 내가 무식하게 풀었다고 생각함...)
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] 평범한 숫자 - PYTHON #11736 (0) | 2021.05.02 |
---|---|
[SWEA 코딩] Calkin-Wilf tree 1 - PYTHON #11688 (0) | 2021.05.01 |
[SWEA 코딩] S/W 문제해결 응용 행렬찾기 - PYTHON #1258 (0) | 2021.04.12 |
[SWEA 코딩] S/W 문제해결 기본 Contact - PYTHON #1238 (0) | 2021.04.10 |
[SWEA 코딩] S/W 문제해결 기본 계산기2 - PYTHON #1223 (0) | 2021.04.09 |