알고리즘
[Python] 한글 자음 모음 합쳐서 단어 만들기
악어_
2024. 3. 29. 14:43
728x90
반응형
할 수는 있을 것 같은데 해본 적은 없어서 구현해봤다
CHO_SUNG = ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]
JUNG_SUNG = ["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"]
JONG_SUNG = ["", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]
# 한글 음절을 만드는 함수
def create_korean_char(chosung, jungsung, jongsung=""):
chosung_index = CHO_SUNG.index(chosung)
jungsung_index = JUNG_SUNG.index(jungsung)
jongsung_index = JONG_SUNG.index(jongsung)
# 한글 음절 코드 계산
korean_char_code = 0xAC00 + ((chosung_index * 21) + jungsung_index) * 28 + jongsung_index
return chr(korean_char_code)
# 한글 자모 합치기 함수
def combine_hangul(jamos):
result = ""
i = 0
while i < len(jamos):
chosung = jamos[i]
i += 1
if i < len(jamos):
jungsung = jamos[i]
i += 1
jongsung = ''
# 종성인지 다음 글자 초성인지 확인
if i < len(jamos) :
jongsung = jamos[i]
i += 1
if i < len(jamos) :
next_chr = jamos[i]
if ord("ㄱ") > ord(next_chr) or ord(next_chr) > ord("ㅎ") : # 자음 범위가 아님 (jongsung은 다음 글자 초성)
jongsung = ""
i -= 1
# 한글 문자로 합치기
result += create_korean_char(chosung, jungsung, jongsung)
else:
break # 중성이 없는 경우
return result
초성/중성/종성을 하드코딩으로 선언하기 싫어서 동적으로 계산하는 방법도 구현해보려 했는데, 종성으로 들어가는 자음의 경우 배열이 일정하지 않아 구현시 예외 상황이 너무 많고 복잡해졌다.
간단하게 구현해본 걸로 만족😅
728x90
반응형