2024. 7. 9. 15:31ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/11283
문제
한글의 각 글자는 초성, 중성, 종성으로 이루어져 있고, 이 세 가지를 모아써서 한 글자를 나타낸다.
초성은 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 19개가 있고, 중성은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ로 총 21개, 종성은 없음, ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 28개가 있다.
첫 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 없음을 합친 "가"가 되고, 두 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 ㄱ을 합친 "각"이 된다. 마지막 글자는 초성에서 ㅎ, 중성에서 ㅣ, 종성에서 ㅎ를 합친 "힣"이 된다.
초성과 중성, 그리고 종성을 합쳐서 만들 수 있는 글자의 개수는 총 19*21*28 = 11,172개가 된다.
한글이 주어졌을 때, 몇 번째 글자인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 글자 하나가 주어진다. 주어지는 글자는 UTF-8로 인코딩 되어 있는 한글이며, 문제 설명에 나온 방법으로 만들 수 있다.
출력
입력으로 주어진 글자가 몇 번째인지 출력한다.
통과한 답안
namespace _11283
{
internal class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
int baseCode = 0xAC00;
Console.WriteLine((char)input[0] - baseCode + 1);
}
}
}
이전의 '한글' 문제의 역방향을 구현하는 문제이다.
한글 문자가 들어오면, 해당 문자가 몇 번째의 문자인지를 찾는 문제이다.
초성, 중성, 종성의 인덱스 계산이 필요 없기 때문에
주어진 입력 값에서 한글 유니코드인 0xAC00을 빼준 후에
인덱스를 맞추기 위해 1을 더해주면 원하는 답을 구할 수 있다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 27922: 현대모비스 입사 프로젝트 (C#) (0) | 2024.07.09 |
---|---|
[BAEKJOON] 백준 16162: 가희와 3단 고음 (C#) (0) | 2024.07.09 |
[BAEKJOON] 백준 11282: 한글 (C#) (0) | 2024.07.09 |
[BAEKJOON] 백준 6504: 킬로미터를 마일로 (C#) (1) | 2024.06.30 |
[BAEKJOON] 백준 10474: 분수좋아해? (C#) (0) | 2024.06.30 |