한 번만 등장한 문자

2024. 9. 11. 18:00코딩테스트 입문

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
문자열 s가 매개변수로 주어집니다. s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록 solution 함수를 완성해보세요. 한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.


제한사항

  • 0 < s의 길이 < 1,000
  • s는 소문자로만 이루어져 있습니다.

입출력 예

s result
"abcabcadc" "d"
"abdc" "abcd"
"hello" "eho"

입출력 예 설명
입출력 예 #1

  • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

입출력 예 #2

  • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

입출력 예 #3

  • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

문자열 s에서 단 한 번만 등장한 문자들만 추려서 사전순으로 출력하는 문제입니다.

 

이런 문제를 볼 때마다 항상 count를 사용하면 몇 번 등장했는지 알 수 있겠다고는 생각이 드는데, 매번 Counter 패키지를 사용합니다.

이번에도 파이썬의 두 가지 방법으로 문제를 풀어보겠습니다.

 

1. Counter 사용

from collections import Counter
def solution(s):
    # 문자열에 Counter을 적용합니다.
    cnt = Counter(s)
    # 1번만 등장한 문자들을 사전 순으로 정렬하고, join을 사용해 합칩니다.
    answer = ''.join(sorted([c for c,  n in cnt.items() if n == 1]))
    return answer

 

2. count 사용

def solution(s):
    # 문자열 s의 각 요소를 c로 불러옵니다.
    # count(c)의 결과가 1일 때만 리스트에 추가합니다.
    # 리스트를 사전 순으로 정렬하고, join을 사용해 합칩니다.
    answer = ''.join(sorted([c for c in s if s.count(c) == 1]))
    return answer

 

Counter 패키지를 쓰는 버릇이 아직도 남아있네요.

전 아래 쪽이 내장 함수만으로 만들었다는 점에서 더 완성도가 높다 생각합니다.

'코딩테스트 입문' 카테고리의 다른 글

편지  (0) 2024.09.13
약수 구하기  (0) 2024.09.12
인덱스 바꾸기  (0) 2024.09.10
영어가 싫어요  (0) 2024.09.09
대문자와 소문자  (1) 2024.09.08