SW Expert Academy-10912-Python

cosmos·2023년 5월 12일
0
post-thumbnail
post-custom-banner

코드

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)}')

결과

ChatGPT Code

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))

ChatGPT 문제풀이

주어진 문제를 해결하기 위해 다음과 같은 접근 방식을 사용할 수 있습니다:
입력값으로부터 테스트 케이스의 수 T를 받습니다.
T번 반복하면서 각 테스트 케이스에 대한 입력값을 받습니다.
각 테스트 케이스에서 같은 문자를 짝지어 제거하고, 남은 문자를 구합니다.
만약 남은 문자가 없다면 "Good"을 출력하고, 그렇지 않으면 남은 문자를 사전 순서대로 정렬하여 출력합니다.

ChatGPT 문제풀이와의 비교

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))입니다.

두 코드 동일한 효율성을 보인다.

문제출처 & 깃허브

sw expert academy
github

post-custom-banner

0개의 댓글