[프로그래머스] 중복된 문자 제거(Python)

TK·2023년 9월 8일

문제 설명

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 1 ≤ my_string ≤ 110
  • my_string은 대문자, 소문자, 공백으로 구성되어 있습니다.
  • 대문자와 소문자를 구분합니다.
  • 공백(" ")도 하나의 문자로 구분합니다.
  • 중복된 문자 중 가장 앞에 있는 문자를 남깁니다.

입출력 예

my_stringresult
"people""peol"
"We are the world""We arthwold"

입출력 예 설명

  • 입출력 예 #1
    "people"에서 중복된 문자 "p"와 "e"을 제거한 "peol"을 return합니다.

  • 입출력 예 #2
    "We are the world"에서 중복된 문자 "e", " ", "r" 들을 제거한 "We arthwold"을 return합니다.


내가 푼 답 (딕셔너리 사용)

def solution(my_string):
    dic = {}
    for i in my_string:
        # if i in dic:
        #     dic[i] = dic[i] + 1
        # else:
        dic[i] = 1
    return ''.join(dic.keys())
my_stringresult
"people""peol"
  • 위의 예시일 경우, 최종적인 dic은 다음과 같이 나타난다.
    {'p': 1, 'e': 1, 'o': 1, 'l': 1}
    따라서 이것들의 key를 이어 붙여주었다.
  • 주석처리 한 코드를 실행하면 아래와 같이 문자 개수까지 나타낼 수 있지만, key만 사용하는데에 불필요 하다고 생각해서 주석 처리 하였다.
    {'p': 2, 'e': 2, 'o': 1, 'l': 1}

정답 풀이1 (fromkeys 메소드 사용)

def solution(my_string):
    return ''.join(dict.fromkeys(my_string))

dict.fromkeys(seq, value)

딕셔너리를 생성할 때 편리하게 사용할 수 있는 메소드. seq 옵션 값에 문자열을 입력할 수도 있다.

  • seq: 생성하려는 dictionary의 키(key)의 목록
  • value: 생성하려는 dictionary의 값(value)
  • 사용 예시
seq = ('name', 'age', 'sex')
dict_1 = dict.fromkeys(seq)
print(dict_1)
dict_2 = dict.fromkeys(seq, 10)
print(dict_2)
result
{'age':None, 'name':None, 'sex':None}
{'age':10, 'name':10, 'sex':10}

정답 풀이2 (if ~ not in)

def solution(my_string):
    answer = ''
    for i in my_string:
        if i not in answer:
            answer+=i
    return answer
profile
쉬운게 좋은 FE개발자😺

0개의 댓글