새소식

Study/문제풀이

[hackerrank] Sherlock and the Valid String (Python)

  • -
728x90

문제 (링크)

  • 주어진 문자열의 각 알파벳 개수가 모두 같으면 YES 리턴
  • 문자열에서 문자 하나를 뺀 뒤 각 알파벳 개수가 모두 같으면 YES 리턴
  • 이 외의 경우 문자열은 not valid, NO 리턴

파이썬 풀이

def isValid(s):
    # Write your code here
    orig_list = list(s)
    unique_list = list(set(s))
    nums = []
    for i in unique_list:
        nums.append(orig_list.count(i))
    nums.sort() #ascending
    ifnum_1= [i for i in nums]
    ifnum_1[-1] = ifnum_1[-1]-1
    
    if (len(set(nums))==1)| (len(set(ifnum_1))==1):
        return "YES"
    elif (len(set(nums))==2)&nums.count(1)==1:
        return "YES"
    else:
        return "NO"

 의도했던 건 반복문을 최대한 적게 쓰는 거였는데 결국 for 파티가 되어버렸다.. 조금 지저분하게 풀었다는 느낌이 없지 않지만, 아무튼 포인트는 문자열 내 개수를 세었을 때 그 수가 모두 같거나, 개수가 가장 많은 수를 하나 뺐을 때 각 문자 개수가 다 같아진다면 valid로 판정하는 것. 이때 예외 상황은 1개짜리 문자가 하나 있다면 그 문자를 뺐을 때 valid string인지 판정하는 경우. 

 백준이었다면 시간초과로 고생 많이 했을 것 같음 ㅎㅎ! 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.