2회 이상 나타난 알파벳이, 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳으로 정의한다.
그러므로, 2회 이상 나타난 알파벳은 자기들끼리 붙어있어야 한다.
초기 버전
- 1번 만 나온 알파벳은 외톨이 알파벳이 될 수 없기에,
Counter
클래스를 활용하여 문자열에서 빈도수가 2이상인 알파벳을 따로 추출- 추출한 알파벳을 문자열에서
find
메소드를 활용해 인덱스를 찾고, 그 인덱스에서 해당 알파벳의 빈도수 만큼이 전부 동일한지 확인한다.- 만약 동일하지 않은경우 분리되어 있는 것이므로, 외톨이 알파벳이다.
후기 버전
defaultdict
라이브러리를 이용해 딕셔너리를 초기화하고, 문자열의 초기값을 집어넣는다.for
문을 돌며i-1
번째 글자와i
번째 글자가 같은지 확인하고, 다른 경우i
번째 문자의 빈도수를 1 증가한다.- 2회 이상 나왔지만 다같이 뭉쳐있는 경우 (예: aaa, bbbb, ccccc)에는 1회로 빈도수가 측정되며 떨어져 있는 경우 (예: aabbaa, eedddee) 2회로 빈도수가 측정된다.
- 결과 출력 전 빈도수 2 이상인 문자를 출력한다.
초기 버전
from collections import Counter
def solution(input_string):
answer = ''
string = Counter(input_string)
alpha = []
for i in string:
if string[i] >= 2:
alpha.append(i)
for j in alpha:
char_index = input_string.find(j)
for k in range(string[j]):
if input_string[char_index + k] != j:
answer += j
break
if not answer:
answer = 'N'
return "".join(sorted(answer))
후기 버전
from collections import defaultdict, Counter
def solution(input_string):
answer = ''
string_dict = defaultdict(int)
string_dict[input_string[0]] += 1
for i in range(1, len(input_string)):
if input_string[i-1] != input_string[i]:
string_dict[input_string[i]] += 1
else:
continue
for j in string_dict:
if string_dict[j] > 1:
answer += j
if not answer:
answer += 'N'
return "".join(sorted(answer))