문제 출처 : https://www.acmicpc.net/problem/11283
언어 : Kotlin
문제 설명 :
한글의 각 글자는 초성, 중성, 종성으로 이루어져 있고, 이 세 가지를 모아써서 한 글자를 나타낸다.
초성은 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 19개가 있고, 중성은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ로 총 21개, 종성은 없음, ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ로 총 28개가 있다.
첫 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 없음을 합친 "가"가 되고, 두 번째 글자는 초성에서 ㄱ, 중성에서 ㅏ, 종성에서 ㄱ을 합친 "각"이 된다. 마지막 글자는 초성에서 ㅎ, 중성에서 ㅣ, 종성에서 ㅎ를 합친 "힣"이 된다.
초성과 중성, 그리고 종성을 합쳐서 만들 수 있는 글자의 개수는 총 19*21*28 = 11,172개가 된다.
한글이 주어졌을 때, 몇 번째 글자인지 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 글자 하나가 주어진다. 주어지는 글자는 UTF-8로 인코딩 되어 있는 한글이며, 문제 설명에 나온 방법으로 만들 수 있다.
출력 :
입력으로 주어진 글자가 몇 번째인지 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 256MB
입출력 예 :
입력 | 출력 |
가 | 1 |
힣 | 11172 |
백 | 4146 |
준 | 7425 |
풀이 :
아스키코드를 사용한 문제.
'가'를 코드로 변환해보면 44032가 나오고, 마지막 글자인 '힣'을 변환하면 55203이 나온다.
이 둘의 차이는 11,172개로 문제에서 제시한 한글로 만들 수 있는 글자 총 수가 나오고, 44032 ~ 55203이 한글의 범위가 된다는 뜻이다.
입출력 예에서 '가'는 1이 출력되었으니 44032 - 44031 = 1
'힣'은 11172가 출력되었으니 55203 - 44031 = 11172이므로
Input값을 코드로 변환시킨 후, 44031을 빼면 된다.
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
bw.write("${readLine()[0].code - 44031}")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
12605번: 단어순서 뒤집기 (0) | 2024.01.15 |
---|---|
3059번: 등장하지 않는 문자의 합 (0) | 2024.01.12 |
2437번: 저울 (0) | 2024.01.11 |
2075번: N번째 큰 수 (0) | 2024.01.11 |
16916번: 부분 문자열 (0) | 2024.01.10 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!