외톨이 알파벳

GGob2._.·2023년 6월 27일
0

algorithm

목록 보기
27/55

문제 설명


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))
profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글