ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 초성 낱말 찾기
    ETC 2021. 12. 3. 19:11
    반응형

    초등학교 1학년생 딸아이의 국어 과제로 초성 낱말 찾기가 주어지는 경우가 있다.

    매번 초성에 맞춰 눈빠지게 글자 찾기가 귀찮아서 초성 문자열이 주어지면 거기에 맞는 글자 조합을 출력하는 프로그램을 작성해 봤다.

     

    1. 주어지는 글자들을 초성별로 모은다.
    2. 초성으로만 구성된 문자열을 받아서 초성에 해당하는 문자들에 대해 production으로 초성 순서에 맞는 글자 조합들을 만들어 출력한다.
    from itertools import product
    
    def get_char_set(ch_list):
        views = list()
        for cl in ch_list:
            for c in ch_list[cl]:
                views.append(c)
        views.sort()
        print('입력된 글자: ' + ', '.join(views))
    initial_consonants = [
        'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ',
        'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ'
    ]
    
    f_c_num = 44032 # '가'에 해당하는 code
    
    code_n_ic = dict()
    for i in range(len(initial_consonants)):
        for code in range(f_c_num, f_c_num + 588):
            code_n_ic[code] = initial_consonants[i]
        f_c_num += 588
    
    
    # {'ㄱ': ['가', '길', '긴'], ...} 형태로 저장.
    ch_list = dict()
    for i in range(len(initial_consonants)):
        ch_list[initial_consonants[i]] = list()
    print('초성 낱말 찾기에 사용될 글자들을 한 글자 씩 입력 후 엔터')
    print('입력 완료 시 0 입력 후 엔터')
    while True:
        print('>>', end='')
        ch = input()
        if len(ch) > 1:
            print('한 글자씩만 입력')
            continue
        if ch == '0':
            break
        try:
            ch_list[code_n_ic[ord(ch)]].append(ch)
            get_char_set(ch_list)
        except KeyError:
            pass
    
    # 초성 string을 입력 받는다.
    print('ㅅㄹㅎ 와 같은 형태의 자음으로만 이뤄진 문자열을 입력하고 엔터')
    print('종료 하려면 0입력 후 엔터')
    while True:
        ic_str = input()
        if ic_str == '0':
            break
        is_no_res = False
        word_list = list()
        for ch in ic_str:
            try:
                if len(ch_list[ch]) == 0:
                    is_no_res = True
                word_list.append(ch_list[ch])
            except KeyError:
                print('>> 결과 없음 <<')
    
        if is_no_res:
            print('>> 결과 없음 <<')
        else:
            for word in product(*word_list):
                print(''.join(word))

     

    국어사전 DB가 있으면 사전에 등록된 단어인지 아닌지를 구분하여 알려주도록 개선해볼 수도 있겠다. ^^

    'ETC' 카테고리의 다른 글

    순열과 조합  (0) 2022.11.12
    로지텍 MX KEYS MINI 사용기  (0) 2022.03.19
    로지텍 keys to go 사용기  (0) 2021.06.27
    IP주소 확인  (0) 2020.12.08
    빌더 패턴  (0) 2020.10.12

    댓글

Designed by Tistory.