[프로그래머스] PCCP 모의고사 1 - 1번

윤동환·2023년 2월 19일
0

Algorithm

목록 보기
53/54
post-thumbnail

외톨이 알파벳

알파벳 소문자로만 이루어진 어떤 문자열에서, 2회 이상 나타난 알파벳이 2개 이상의 부분으로 나뉘어 있으면 외톨이 알파벳이라고 정의합니다.

예시

  • a는 2회 이상 나타나지만, 하나의 덩어리로 뭉쳐있으므로 외톨이 알파벳이 아닙니다. b, c도 a와 같은 이유로 외톨이 알파벳이 아닙니다.
    ede(aaa)bbccd
  • d는 2회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다. e도 d와 같은 이유로 외톨이 알파벳입니다.
    e(d)eaaabbcc(d)
  • e는 4회 나타나면서, 2개의 부분으로 나뉘어 있으므로 외톨이 알파벳입니다.
    "(ee)dd(ee)"

문제

문자열 input_string이 주어졌을 때, 외톨이 알파벳들을 알파벳순으로 이어 붙인 문자열을 return 하도록 solution 함수를 완성해주세요.
만약, 외톨이 알파벳이 없다면 문자열 "N"을 return 합니다.

내가 작성한 코드

import collections

def isDisconnect(input_string, idx):
    length = len(input_string)
    s = input_string[idx]
    idx += 1
    while idx < length and s == input_string[idx]: # 처음 문자 묶음 제거
        idx += 1
    li = input_string[idx:]
    if s in li:
        return 1
    return 0


def isSolo(input_string):
    dict = {}
    i = 0
    length = len(input_string)
    while i < length:
        if input_string[i] not in dict.keys():
            idx = isDisconnect(input_string, i)
            if idx == 1:
                dict[input_string[i]] = 1
        i += 1
    return dict    
    
def solution(input_string):
    dict = isSolo(input_string)    
    answer = "".join(sorted(dict.keys()))
    if answer == "":
        answer = "N"    
    return answer

print(solution("eeddee"))

고려한 부분

  1. 문자열을 완전탐색으로 확인을하면 앞서 찾은 외톨이 문자도 계속 확인을 해야되기때문에 중복을 허용하지 않는 dictionary에 넣고 찾고자하는 문자가 dict에 있는지 확인하게하여 불필요한 검색을 줄이고자 하였다.
  2. isDisconnect로 외톨이문자인지 확인하였는데, 겹치는 문자들을 스킵하고 싶어서 앞에 중복되는 문자열의 마지막 인덱스를 리턴하고자하였으나, 함수는 하나의 기능만 수행하게 하고싶어서 외톨이 문자인지 체크만 하는 용도로 두었다.
profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글