def isValid(s):
isValid = 'YES'
# 정렬해서 개수 카운팅 쉽게 변환
sortedStr = ''.join(sorted(s))
firstLetter = sortedStr[0]
cmpCount = 1
# 기준이 되는 카운팅 개수 구하기
for c in sortedStr[1:]:
if c == firstLetter:
cmpCount += 1
else:
firstLetter = c
break
counter = 1
limit = 0
# 기준 카운팅 개수와 현재 카운팅 개수가 2번 다를 경우 유효하지 않음
for c in sortedStr[cmpCount+1:]:
if c == firstLetter:
counter += 1
else:
if cmpCount != counter:
limit += 1
if limit > 1:
isValid = 'NO'
break
firstLetter = c
counter = 1
# 위의 로직에서 마지막에 다른 경우는 처리가 안되기 때문에 여기에서 체크
if cmpCount != counter and limit == 1:
isValid = 'NO'
return isValid
위의 로직은 기준이 되는 개수를 구한 다음에 해당 개수를 넘어가는 경우의 수가 1개 초과 시 유효하지 않음으로 간주하는 간단한 로직이다.
원시적인 방법으로 생각하면 문자열의 처음부터 끝까지 순회하며 해당 문자열의 개수를 카운팅 하는 방법이 있다.
'HackerRank' 카테고리의 다른 글
Greedy Florist (0) | 2019.05.12 |
---|---|
Special Palindrome Again (0) | 2019.05.12 |
Frequency Queries (0) | 2019.05.11 |
Merge Sort: Counting Inversions (0) | 2019.05.11 |
Fraudulent Activity Notifications (0) | 2019.04.29 |
댓글