문제

문자열을 전달받아 해당 문자열에서 중복해서 나타난 문자들을 담은 list를 반환하는

duplicated_letters 함수를 작성하시오.

 

 


생각해보기

1. 문자열을 두 번 순회해서 첫 단어와 다음 단어를 비교....

2. 문자가 같지 않다면 그 두 요소 중 하나의 요소를 새로운 리스트에 넣으면 될 것 같다..?

.....

3. 일단해보기..

 

 


풀이

def duplicated_letters(s):
    a = 0
    letters_list = []    # 중복 되는 단어들을 담아줄 리스트 생성
    for i in s:          # 리스트를 순회
        a += 1           # 다음 요소와 비교하기 위한 인덱스를 하나씩 넣어줌
        for j in s[a:]:  # 순회하는 리스트 요소의 다음값을 순회하는 반복문 생성
            if i == j:
                letters_list.append(i)
    letters_set = set(letters_list)   # 리스트 내에 중복값 제거
    letters_list1 = list(letters_set)
    return letters_list1



print(duplicated_letters('apple')) # => [‘p’]
print(duplicated_letters('banana')) # => [’a’, ‘n’]

 

 


해설

처음 생각해본 연속되는 두 요소가 다르면 한 요소를 리스트에 넣는 것.

반은 맞았고, 반은 틀렸다..

 

코드를 보면 마지막 부분에 set를 통해 중복 값을 없애주었는데

그 이유는 'banana' 같은 경우 ['a', 'n', 'a', 'n'] 이런 식으로 나타났다.

 

문제 자체를 약간 다르게 해석하고 푼 것이다. 

문제의 내용은 "문자열 요소 중 하나 이상의 같은 요소를 적는 것"

즉, 각 이어지는 요소들을 비교하면 안 됐다.

 

새로운 리스트를 넣은 다음, for문을 통해 각 요소가 리스트에 있으면 안 넣고, 없으면 넣어주는 형식으로 풀었어야 했다.

 

어쨌든 맞긴 했으니까.... 다음부터는 참고하자!

복사했습니다!