작성일 :

문제 링크

11282번 - 한글

설명

N번째 한글 음절을 출력하는 문제입니다.


접근법

완성형 한글은 유니코드 U+AC00에서 시작해 총 11,172글자가 연속 배치되어 있습니다.

따라서 N번째 글자의 코드포인트는 0xAC00 + (N - 1)입니다.

C#에서는 char.ConvertFromUtf32를 사용하고, C++에서는 UTF-8 3바이트로 직접 변환합니다.



Code

C#

1
2
3
4
5
6
7
8
9
using System;

class Program {
  static void Main() {
    var n = int.Parse(Console.ReadLine()!);
    var ch = char.ConvertFromUtf32(0xAC00 + (n - 1));
    Console.WriteLine(ch);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int n; cin >> n;
  int code = 0xAC00 + (n - 1);
  char utf8[4];
  utf8[0] = static_cast<char>(0xE0 | ((code >> 12) & 0x0F));
  utf8[1] = static_cast<char>(0x80 | ((code >> 6) & 0x3F));
  utf8[2] = static_cast<char>(0x80 | (code & 0x3F));
  utf8[3] = '\0';
  cout << utf8 << "\n";

  return 0;
}