def lonely_word(word: str) -> str:
dict, result = {}, []
for x in word:
if x not in dict:
dict[x] = 1
else:
dict[x] += 1
for key, value in dict.items():
if value % 2 == 1:
result.append(key)
return ''.join(map(str, sorted(result))) if result else 'Good'
T = int(input())
for test_case in range(1, T + 1):
word = str(input())
print(f'#{test_case} {lonely_word(word)}')
T = int(input()) # 테스트 케이스의 수를 입력받습니다.
for _ in range(T):
string = input() # 알파벳 소문자로 이루어진 문자열을 입력받습니다.
counts = {} # 각 문자의 등장 횟수를 저장할 딕셔너리를 생성합니다.
# 각 문자의 등장 횟수를 세어 딕셔너리에 저장합니다.
for char in string:
counts[char] = counts.get(char, 0) + 1
remaining = [] # 짝지어 제거되지 않은 문자들을 저장할 리스트를 생성합니다.
# 딕셔너리를 순회하면서 짝지어 제거되지 않은 문자를 찾아 리스트에 추가합니다.
for char, count in counts.items():
if count % 2 != 0:
remaining.append(char)
# 리스트에 남은 문자가 없는 경우 "Good"을 출력하고, 그렇지 않은 경우 남은 문자를 사전 순서대로 정렬하여 출력합니다.
if len(remaining) == 0:
print("Good")
else:
remaining.sort()
print("".join(remaining))
주어진 문제를 해결하기 위해 다음과 같은 접근 방식을 사용할 수 있습니다:
입력값으로부터 테스트 케이스의 수 T를 받습니다.
T번 반복하면서 각 테스트 케이스에 대한 입력값을 받습니다.
각 테스트 케이스에서 같은 문자를 짝지어 제거하고, 남은 문자를 구합니다.
만약 남은 문자가 없다면 "Good"을 출력하고, 그렇지 않으면 남은 문자를 사전 순서대로 정렬하여 출력합니다.
ChatGPT Code: 위 코드의 전체 시간 복잡도는 다음과 같이 계산됩니다
1. T번의 테스트 케이스 반복: O(T)
2. 각 테스트 케이스에서 문자열을 순회하며 등장 횟수를 세는 과정: O(N) (N은 문자열의 길이)
3. 등장 횟수를 세어 저장한 딕셔너리를 순회하여 짝지어 제거되지 않은 문자를 찾는 과정: O(M) (M은 문자열에서 중복되는 문자의 수)
4. 남은 문자들을 정렬하는 과정: O(MlogM) (M은 남은 문자의 수)
5. 출력 과정: O(M)
따라서, 전체 시간 복잡도는 O(T * (N + MlogM))입니다.
내 코드: 전체 시간 복잡도는 O(T * (N + MlogM))입니다.
두 코드 동일한 효율성을 보인다.