유효한 문자열 : 문자열에 존재하는 문자의 개수가 모두 동일
유효한 문자열을 만들기 위해 제거해야하는 문자의 개수가 1개 이하인 경우 return YES
, 아니면 NO
Counter()로 문자열의 문자 빈도수를 구한다
빈도수를 set()으로 묶어 기준으로 삼는다
기준값을 돌면서 제거된 개수는 0으로 초기화해준다
문자 빈도수랑 기준값을 비교해서 다른 경우는 값을 제거해야 한다
제거해야 할 개수를 구할 때 기준값과 빈도수의 차이를 구하는데 차이보다 빈도수가 적다면 빈도수만큼 제거한다. remove_count에 그 값을 누적해준다
빈도수를 다 돌았으면 제거된 수가 1 이하인지 판단하고 참이라면 유효한 문자열이므로 YES
반환한다
기준값을 다 돌고도 YES
가 아니라면 기준값마다 제거해야 할 문자 수가 2 이상이므로 NO
반환한다
4 : aabbc YES
5 : aaaaabc NO
18 : abcdefghhgfedecba YES
#!/bin/python3
import os
from collections import Counter
def is_valid(s):
s_counter = Counter(s)
standard = set(s_counter.values())
for std in standard:
remove_count = 0
for v in s_counter.values():
if std != v:
diff = abs(std - v)
if diff > v:
remove_count += v
else:
remove_count += diff
if remove_count < 2:
return "YES"
return "NO"
if __name__ == "__main__":
fptr = open(os.environ["OUTPUT_PATH"], "w")
s = input()
result = is_valid(s)
fptr.write(result + "\n")
fptr.close()