반응형

✅ 문제 설명
문자열 s가 주어졌을 때, 한 번만 등장하는 문자들을 찾아 사전순으로 정렬한 문자열을 반환하는 프로그램을 작성합니다. 만약 한 번만 등장하는 문자가 없다면 빈 문자열을 반환합니다.
🔍 핵심 개념
1️⃣ 딕셔너리(Dictionary)란?
딕셔너리는 키(key)와 값(value) 쌍으로 데이터를 저장하는 자료구조입니다.
my_dict = {'a': 1, 'b': 2}
print(my_dict['a']) # 1
📌 딕셔너리를 사용하면 문자 등장 횟수를 저장할 수 있습니다.
2️⃣ dict.get(key, default) 함수 이해
dict.get()은 딕셔너리에서 특정 키의 값을 가져오는 함수입니다.
- 키가 존재하면 그 값을 반환
- 키가 없으면 기본값(default)을 반환
my_dict = {'a': 1}
print(my_dict.get('a', 0)) # ✅ 1 (key 'a'가 존재)
print(my_dict.get('b', 0)) # ✅ 0 (key 'b'가 없으므로 기본값 반환)
📌 get()을 사용하면 KeyError 없이 안전하게 값을 가져올 수 있습니다.
3️⃣ +1이 필요한 이유
문자가 등장할 때마다 기존 값에 +1을 더해서 등장 횟수를 증가시킵니다.
for char in s:
count[char] = count.get(char, 0) + 1
📌 +1을 하지 않으면 등장 횟수가 증가하지 않고 모든 값이 0이 됩니다.
💡 예제 실행 ("hello")
문자 count.get(char, 0) 값 업데이트된 count
'h' | 0 → 0 + 1 = 1 | {'h': 1} |
'e' | 0 → 0 + 1 = 1 | {'h': 1, 'e': 1} |
'l' | 0 → 0 + 1 = 1 | {'h': 1, 'e': 1, 'l': 1} |
'l' | 1 → 1 + 1 = 2 | {'h': 1, 'e': 1, 'l': 2} |
'o' | 0 → 0 + 1 = 1 | {'h': 1, 'e': 1, 'l': 2, 'o': 1} |
✅ 최종 결과:
{'h': 1, 'e': 1, 'l': 2, 'o': 1}
🛠 문제 해결 코드
def solution(s):
count = {} # 문자 개수를 저장할 딕셔너리
for char in s: # 문자열을 한 글자씩 반복
count[char] = count.get(char, 0) + 1 # 등장 횟수 증가
unique_chars = [] # 한 번만 등장한 문자를 저장할 리스트
for char in s:
if count[char] == 1:
unique_chars.append(char)
return "".join(sorted(unique_chars)) # 사전 순 정렬 후 문자열 변환
📌 실행 예제 및 결과
print(solution("abcabcadc")) # "d"
print(solution("abdc")) # "abcd"
print(solution("hello")) # "eho"
print(solution("aabbcc")) # "" (한 번만 등장하는 문자가 없음)
🔥 정리
개념 설명
딕셔너리(Dictionary) | 키-값 쌍으로 데이터를 저장하는 자료구조 |
dict.get(key, default) | 키가 없으면 기본값 반환하여 KeyError 방지 |
+1 연산의 필요성 | 문자가 등장할 때마다 등장 횟수를 증가 |
사전 순 정렬 | sorted()를 사용하여 정렬 후 문자열 변환 |
반응형
'IT > algorithm' 카테고리의 다른 글
[programmers] '문자열 계산하기' 문제 해설 및 정답코드 (0) | 2025.03.24 |
---|---|
[Python] 알고리즘 개념20 - 이진 탐색(Binary Search) (1) | 2025.02.28 |
[Python] 알고리즘 개념19 - 정렬 알고리즘 (퀵 정렬, 병합 정렬, 힙 정렬) (0) | 2025.02.27 |
[Python] 알고리즘 개념18 - 분할 정복(Divide and Conquer) (1) | 2025.02.27 |
[Python] 알고리즘 개념17 - 완전 탐색(Brute Force) (0) | 2025.02.27 |
[Python] 알고리즘 개념16 - 그리디 알고리즘(Greedy Algorithm) (0) | 2025.02.27 |
[Python] 알고리즘 개념15 퀴즈 - 세그먼트 트리 (0) | 2025.02.24 |
[Python] 알고리즘 개념15 - 세그먼트 트리(Segment Tree) (0) | 2025.02.24 |
댓글