[문제 링크] 👇
Solution
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
word = input().strip()
word = sorted(word) # 정렬하기
result = ""
for i in word:
if word.count(i) % 2 != 0:
if i not in result:
result += i
if len(result) == 0:
result = "Good"
print(f"#{test_case} {result}")
이 문제에서는 각 문자의 개수를 짝지어 남는 문자를 찾기 때문에, count() 함수를 반복적으로 호출하지 않고, 문자 빈도수를 저장한 후, 각 문자가 짝이 맞지 않는지 확인하여 남는 문자를 추출하는 것이 더 효율적이다. Counter를 활용해 각 문자의 등장 횟수를 구하고, 홀수 개수인 문자만 결과에 추가하는 방법으로 최적화할 수 있다.
개선할 점
- Counter를 사용한 빈도 계산
- Counter는 문자열 전체를 한 번만 순회하여 각 문자의 빈도를 기록하므로 효율적이다.
- 사전 순서
- 최종적으로 남는 문자를 sorted()로 정렬하여 사전 순서를 유지한다.
- 조건부 추가
- count % 2 != 0 조건을 통해 홀수 개수인 문자만 빠르게 추출한다.
최적화된 코드
from collections import Counter
T = int(input()) # 테스트 케이스 수
for test_case in range(1, T + 1):
word = input().strip()
char_count = Counter(word) # 각 문자의 개수를 세어 저장
# 홀수 개수인 문자만 남김
result = ''.join(sorted(char for char, count in char_count.items() if count % 2 != 0))
# 남는 문자가 없다면 "Good"을 출력
if not result:
result = "Good"
print(f"#{test_case} {result}")
컴프리헨션을 쓰지 않은 코드
result = []
for char, count in char_count.items():
if count % 2 != 0:
result.append(char)
result = ''.join(sorted(result))
'SWEA' 카테고리의 다른 글
[SWEA] 15230. 알파벳 공부 (Python/D3) (0) | 2024.11.04 |
---|---|
[SWEA] 19185. 육십갑자 (Python/D3) (0) | 2024.11.03 |
[SWEA] 1222. [S/W 문제해결 기본] 6일차 - 계산기1 (Python/D4) (0) | 2024.10.31 |
[SWEA] 13547. 팔씨름 (Python/D3) (0) | 2024.10.30 |
[SWEA] 1229. [S/W 문제해결 기본] 8일차 - 암호문2 (Python/D3) (0) | 2024.10.30 |