관리 메뉴

나만을 위한 블로그

[Algorithm] 프로그래머스 - 문자 개수 세기 (Kotlin) 본문

알고리즘 문제 풀이/프로그래머스

[Algorithm] 프로그래머스 - 문자 개수 세기 (Kotlin)

참깨빵위에참깨빵_ 2024. 1. 6. 19:00
728x90
반응형
알파벳 대소문자로만 이뤄진 문자열 my_string이 주어질 때 my_string에서 대문자의 개수, 소문자의 개수를 순서대로 담은 길이 52의 정수 배열을 리턴하는 함수를 완성하라

 

 

대문자인 경우, 소문자인 경우를 구분하는 것은 isUpperCase(), isLowerCase()를 통해 가능하다.

하지만 이후 result와 같이 정수 배열을 만들어야 하는데, 저 부분의 구현에서 막혀서 풀지 못했다.

아래는 다른 사람의 풀이를 참고한 코드다.

 

class Solution {
    fun solution(myStr: String): IntArray {
        val counts = IntArray(52)

        myStr.forEach {
            when {
                it.isUpperCase() -> counts[it - 'A']++
                it.isLowerCase() -> counts[it - 'a' + 26]++
            }
        }

        return counts
    }
}

 

IDE에서 확인하면 알겠지만 forEach 안에서 쓰는 it의 타입은 Char다.

그리고 대문자일 경우 'A'를 빼는데, 이 문자의 아스키 값은 65다. 만약 myStr이 "ABC"라면 0, 1, 2 순서로 숫자들이 생길 것이다. 이것이 인덱스가 되고 해당 인덱스마다 대문자 A~Z의 각 개수가 들어가게 된다.

 

이후 소문자인 경우의 로직이 실행된다. 소문자기 때문에 'a'를 빼지만 26을 더한 걸 볼 수 있다. 26을 더하는 이유는 문제에서 소문자들은 대문자 Z 이후에 위치해야 하는데, 대문자 A부터 Z까지의 인덱스는 25기 때문에 26을 더한다. 대문자 A가 0번 인덱스인 것을 기억하자.

 

반응형
Comments