★ solved.ac 난이도 : B4
(작성 시점 기준)
[문제 본문 링크]
N번째 한글을 출력하는 문제로, UTF-8 인코딩을 이해하셔야 합니다.
한글의 UTF-8 코드를 자세히 살펴보면 규칙을 찾을 수 있습니다.
(한글의 UTF-8 코드는 3Byte입니다.)
- 규칙 1. 첫 번째 글자인 '가'의 UTF-8 코드는 0xEA, 0xB0, 0x80 (234, 176, 128)입니다.
- 규칙 2. 마지막 글자인 '힣'의 UTF-8 코드는 0xED, 0x9E, 0xA3 (237, 158, 163)입니다.
- 규칙 3. 모든 코드의 값은 0x80~0xBF (128~191) 범위에 속합니다. (첫 바이트 예외 : 0xEA~)
특히 규칙 3은 64진수와 비슷하며, 이를 활용하여 문제를 풀 수 있습니다.
규칙 3을 만족하면서 가장 빠른 코드의 값은 0xEA, 0x80, 0x80 (234, 128, 128)이고 규칙 1에서 언급한 '가'의 UTF-8 코드는 0xEA, 0xB0, 0x80 (234, 176, 128)입니다.
두 코드 값의 차이는 0x00, 0x30, 0x00 (0, 48, 0)이고, 64진수로 표현된 값을 10진수로 변환하면 3072가 됩니다.
먼저 입력으로 주어진 N에 3071을 더합니다. (0이 아닌 1부터 시작하므로 1-Based를 0-Based로 변환하기 위함)
그리고 이 값을 64진수로 변환한 다음 결과 값에 각각 234, 128, 128을 더하고 문자열 형식으로 출력하면 됩니다.
[소스 코드 (C++98)]
★ 틀린 점이 있다면 알려주세요~!