본문 바로가기

~2023

[Python] 백준 11282-11285번 문제, 파이썬에서 한글을 숫자 또는 문자열로 표현하기

728x90
반응형

<문제 링크>

 

https://www.acmicpc.net/problem/11282

https://www.acmicpc.net/problem/11283

https://www.acmicpc.net/problem/11284

https://www.acmicpc.net/problem/11285

 


<풀이>

 
위에 언급한 네 개의 문제의 풀이는 모두 연관되어 있다.
왜냐하면 모두 한글을 문자열 또는 숫자로 표현하는 것이며, 좀 더 자세하게 이야기 하자면 한글을 문자열로 표현할 때 초성, 중성, 종성 또는 하나의 문자를 표현 가능하도록 해야 한다.
당연히 이런 문제는 알고리즘이 여러 개가 있는 것이 아니라 하나의 답만 존재하기 때문에 구글링 밖에 없다.
설명이 중복되고 길게 할 필요가 없기 때문에 아래 전체 코드에 주석으로 간단하게 설명하겠다.
 
import sys

IN = sys.stdin.readline

if __name__ == "__main__":
    N = int(IN())

	# 11282번
    print(chr(44031+N)) # '가'부터 44032로 표현된다.
    
    # 11283번
    print(ord(S) - 44031) # 위와 반대
    
    # 초성, 중성, 종성
    first=["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]
    second=["ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"]
    third=["", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ]
    
    # 11284번
    n = ord(IN().rstrip()) - 44032

    print(first[n // 21 // 28]) # 초성 찾기
    print(second[n % (21 * 28) // 28]) # 중성 찾기
    print(third[n % 28]) # 종성 찾기
    
    # 11285번
    s1 = IN().rstrip()
    s2 = IN().rstrip()
    s3 = IN().rstrip()
    n = 44032
    
    for i in range(len(first)): # 초성으로 변환
        if s1 == first[i]:
            n += (i * 21 * 28)
            break
    
    for i in range(len(second)): # 중성으로 변환
        if s2 == second[i]:
            n += i * 28

    for i in range(len(third)): # 종성으로 변환
        if s3 == third[i]:
            n += i

    print(chr(n))
728x90
반응형