본문 바로가기
HackerRank

Sherlock and the Valid String

by 스빠시빠 2019. 5. 11.
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

댓글