기억보다 기록을

[Programmers] 한 번만 등장한 문자 (list comprehension, Collections.Counter() 사용별 답안) 본문

Algorithm/Programmers

[Programmers] 한 번만 등장한 문자 (list comprehension, Collections.Counter() 사용별 답안)

juyeong 2023. 2. 6. 07:29
반응형

 

중복제거니까 set을 쓸까하다가, 순서가 ordered 되어야하니 패스. Collection 라이브러리의 orderDict이 중복제거 시 성능이 좋길래 무턱대고 써

from collections import OrderedDict

def solution(s):
    answer= ''.join(sorted(list(OrderedDict.fromkeys(s))))

    if len(answer) == 0:
        return ''
    else:
        print(answer)

당연히 안됩니다..  매개변수 s가 "abcabcadc" 라면 "d"를 리턴해야하는데 위의 코드는 "abcd"를 리턴한다.

 

그럼 어떻게 풀어야하나.

 

1) 리스트 컴프리헨션

2) Collections의 counter

 

두가지로 풀어보자.

 

 

1) list comprehension 

def solution(s):
    return ''.join(sorted([c for c in s if s.count(c) == 1]))

 

2) Collections_Counter

from collections import Counter

def solution(s):
	string = []
	for i,j in Counter(s).items():
		if j == 1:
			string.append(i)
			return ''.join(sorted(string))

순회를 돌면서 문자열 i가 몇개(j) 있는지 출력

 

source: https://school.programmers.co.kr/learn/courses/30/lessons/120896

Conter 개념 참고:

https://www.daleseo.com/python-collections-counter/

반응형