PS

[백준/Python] (S3) 오타 자동 수정 - 6518

MSHUN 2024. 3. 7.
반응형

Baekjoon Online Judge의 6518 오타 자동 수정 문제의 Python풀이입니다.

 

6518번: 오타 자동 수정

첫째 줄에는 단어 사전에 있는 단어의 수 n이 주어진다. (n ≤ 10000) 다음 n개 줄에는 단어 사전에 있는 단어가 한 줄에 하나씩 주어진다. 다음 줄에는 오타 수정 프로그램을 이용해 수정할 단어의

www.acmicpc.net

 

💻코드

# 두 단어가 비슷한지 판별하는 함수
def is_similar(word1, word2):
    # 두 단어의 길이 차이가 1보다 크면 False 반환
    if abs(len(word1) - len(word2)) > 1: return False
    # 두 단어의 길이가 같을 때
    if len(word1) == len(word2):
        # 다른 문자의 개수를 세어 diff_count에 저장
        diff_count = sum(1 for a, b in zip(word1, word2) if a != b)
        # 다른 문자가 없으면 True 반환
        if diff_count == 0:
            return True
        # 다른 문자가 1개면 True 반환
        elif diff_count == 1:
            return True
        # 다른 문자가 2개면 위치를 바꿔서 같은지 확인
        elif diff_count == 2:
            indices = [i for i, (a, b) in enumerate(zip(word1, word2)) if a != b]
            if len(indices) == 2 and word1[indices[0]] == word2[indices[1]] and word1[indices[1]] == word2[indices[0]]:
                return True
    # word1의 길이가 더 길면 word1과 word2를 바꿔서 다시 비교
    if len(word1) > len(word2): word1, word2 = word2, word1  
    # word2에서 한 문자를 빼서 word1과 같은지 비교
    for i in range(len(word2)):
        if word2[:i] + word2[i+1:] == word1: return True
    # 위의 조건에 모두 해당하지 않으면 False 반환
    return False

# 사전에 포함된 단어 수를 입력 받음
n = int(input())
# 사전에 포함된 단어를 입력 받아 리스트에 저장
dictionary = [input() for _ in range(n)]
# 비교할 단어의 수를 입력 받음
q = int(input())
for _ in range(q):
    # 비교할 단어를 입력 받음
    word = input().strip()
    # 입력 받은 단어가 사전에 있는지 확인
    if word in dictionary:
        print(f"{word} is correct")
    else:
        found_similar = False
        # 사전의 모든 단어와 비교하여 비슷한 단어가 있는지 확인
        for dict_word in dictionary:
            if is_similar(word, dict_word):
                print(f"{word} is a misspelling of {dict_word}")
                found_similar = True
                break
        # 비슷한 단어가 없으면 알 수 없는 단어로 처리
        if not found_similar:
            print(f"{word} is unknown")

🧠풀이

오타 수정하는 코드 짜기

🤔느낀 점

상당히 번거롭다...

Baekjoon Online Judge

반응형

댓글