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
반응형
'~2023' 카테고리의 다른 글
[Python] 신규 아이디 추천 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.04.18 |
---|---|
[Python] 숫자 문자열과 영단어 - 2021 카카오 채용연계형 인턴십 (0) | 2022.04.18 |
[논문 리뷰] ResNet: Deep Residual Learning for Image Recognition (0) | 2022.04.03 |
[CNN] LeNet-5 모델 구현하기 (0) | 2022.03.21 |
[Git] Commit 메세지에 issue 연결하기 (0) | 2022.02.18 |