반응형
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")
🧠풀이
오타 수정하는 코드 짜기
🤔느낀 점
상당히 번거롭다...

반응형
댓글