반응형

백준 2941번 문제입니다. (solved.ac) 기준 실버 5 문제입니다.

https://www.acmicpc.net/problem/2941

 

2941번: 크로아티아 알파벳

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=

www.acmicpc.net

문제

문제 접근

문제에서 주어진 크로아티아 알파벳 변경 표를 참고하여 입력받은 문자열을 탐색하며 크로아티아 알파벳으로 변경이 가능한 문자들을 하나의 크로아티아 알파벳으로 변경할 수 있도록하였습니다.

예를들어 c=를 크로아티아 알파벳인 č로 변환하게 된다면 2개의 문자가 1개로 줄어드는 것이고 dz= 를 dž로 변환하게 된다면 3개의 문자가 1개로 줄어드는 것 입니다.

기본적인 문자열의 길이를 처음 입력받은 문자열의 길이로 지정해주고 크로아티아 알파벳으로 변경 가능한 문자열들을 찾을 때 마다 줄어든 문자의 수 만큼 기본 문자열의 길이에서 빼줄 수 있도록 하였습니다. (dz=를 제외하고 다른 모든 부분은 -1이고 dz=만 -2)

정답 코드

fun main() {

    val string = readln()
    var ans = string.length

    string.forEachIndexed { index, it ->
        if (index + 1 < string.length)
            when (it) {
                'c' -> {
                    if (string[index + 1] == '=' || string[index + 1] == '-') ans--
                }
                'd' -> {
                    if (index + 2 < string.length)
                        if (string[index + 1] == 'z' && string[index + 2] == '=') ans--
                    if (string[index + 1] == '-') ans--
                }
                'l' -> {
                    if (string[index + 1] == 'j') ans--
                }
                'n' -> {
                    if (string[index + 1] == 'j') ans--
                }
                's' -> {
                    if (string[index + 1] == '=') ans--
                }
                'z' -> {
                    if (string[index + 1] == '=') ans--
                }
            }
    }
    println(ans)
}

 

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기