반응형
문제 해결
1. D4 | 카운팅을 조건에 맞게 잘해주는 것
2. 주어진 울음소리를 하나하나 담을 수 있는 배열이나 딕셔너리를 만들고 하나하나 더해준다.
3. 울음소리가 완성됐을 때(croak가 1 이상일 때) 다음에 c가 나온다면 c는 이전 울음소리의 반복이므로 -1 해준다.
(🔼🔼🔼이 문제의 핵심 🔼🔼🔼)
4. 문제가 없다면 카운팅된 숫자가 전체 개구리의 숫자이지만
5. 울음소리의 순서가 맞지 않거나, 완성이 불가능한 울음소리라면 -1로 답을 출력해주면 된다.
💨 처음 문제 풀 때 울음소리 하나가 완성되면 이전까지 나와있는 c의 갯수로 카운팅을 했었는데 정답이 아니다 (50개 맞음) 여기서 중요한건 패턴인데 울음소리가 완성되고 다음에 c가 나온다면 (바로 다음이 아니더라도) 그것은 이전 개구리 울음소리의 반복이다.
소스 코드
for tc in range(1, 1 + int(input())):
croak = input()
# 울음소리를 카운팅할 딕셔너리
croak_counting = {
'c': 0,
'r': 0,
'o': 0,
'a': 0,
'k': 0,
}
answer = -1
# 울음소리를 하나하나 순서대로 확인해준다.
for s in croak:
# 울음소리에 따라 카운트를 1씩 올려주고
croak_counting[s] += 1
# 다음 울음소리가 c가 나오고 croak가 완성된 상태라면 다음에 나온 c는 이전 울음소리의 반복이므로 전체 -1 해준다.
if 0 not in croak_counting.values() and s == 'c':
for ss in croak_counting.keys():
croak_counting[ss] -= 1
# 울음소리가 순서에 맞지 않게 나왔을 때
if croak_counting['c'] < croak_counting['r']:
break
if croak_counting['r'] < croak_counting['o']:
break
if croak_counting['o'] < croak_counting['a']:
break
if croak_counting['a'] < croak_counting['k']:
break
# 딕셔너리에 들어간 울음소리의 수가 전체 개구리의 숫자이다
if len(set(croak_counting.values())) == 1:
answer = croak_counting['c']
print('#{} {}'.format(tc, answer))
출처: SW Expert Academy
개구리 한 마리가 한번 울면 “croak”하는 소리가 난다. 개구리 한 마리가 계속 여러 번 울면 울음소리가 다음처럼 나타날 수 있다. “croakcroak”, “croak”, “croakcroakcroakcroak” 영은이는 개구리를 연구하기 위해 많은 개구리를 사육한다. 영은이는 개구리들을 키우는 우리에 들어와 울음소리를 녹음했다. 여러 개구리가 동시에 울면 울음소리가 섞여서 녹음된다. 이 때 한 개구리의 울음소리는 녹음된 울음소리에서 부분 문자열로 나타난다. 이 부분 문자열은 연속하지 않아도 된다. 예를 들어 "crcoarkcoroakak"와 같을 수 있다. 그렇다면, 녹음을 할 때 있었던 개구리는 최소 몇 마리일까? [입력] 첫 번째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스의 첫 번째 줄에 개구리들의 울음소리를 나타내는 길이 5 이상 2,500이하인 문자열이 주어진다. 이 문자열은 ‘c’, ‘r’, ‘o’, ‘a’, ‘k’로만 이루어져 있다. [출력] 각 테스트 케이스마다 첫번째 줄에는 ‘#T’(T는 테스트케이스 번호를 의미하며 1부터 시작한다.)를 출력하고, 개구리의 최소 수를 출력한다. 개구리의 울음소리로 불가능한 경우 -1을 출력하면 된다. |
반응형
'Algorithm Problem > Python' 카테고리의 다른 글
[python] SWEA - 2819. 격자판의 숫자 이어 붙이기 (0) | 2020.08.08 |
---|---|
[python] SWEA - 1868. 파핑파핑 지뢰찾기 (2) | 2020.08.07 |
[python] SWEA - 7465. 창용 마을 무리의 개수 / 10200. 구독자 전쟁 (0) | 2020.08.05 |
[python] SWEA - 6959. 이상한 나라의 덧셈게임 / 6485. 삼성시의 버스 노선 (2) | 2020.08.04 |
[python] SWEA - 7701. 염라대왕의 이름 정렬 (0) | 2020.08.03 |