Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 안드로이드 os 구조
- 클래스
- 2022 플러터 안드로이드 스튜디오
- 서비스 쓰레드 차이
- 객체
- 안드로이드 라이선스
- 안드로이드 유닛테스트란
- 2022 플러터 설치
- jvm이란
- 안드로이드 레트로핏 crud
- android retrofit login
- 안드로이드 레트로핏 사용법
- android ar 개발
- rxjava cold observable
- 플러터 설치 2022
- 안드로이드 라이선스 종류
- rxjava hot observable
- rxjava disposable
- 큐 자바 코드
- ANR이란
- 멤버변수
- 자바 다형성
- jvm 작동 원리
- 스택 큐 차이
- Rxjava Observable
- 안드로이드 유닛 테스트 예시
- 안드로이드 유닛 테스트
- 서비스 vs 쓰레드
- ar vr 차이
- 스택 자바 코드
Archives
- Today
- Total
나만을 위한 블로그
[Algorithm] 프로그래머스 - 문자 개수 세기 (Kotlin) 본문
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번 인덱스인 것을 기억하자.
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 글자 지우기 (Kotlin) (0) | 2024.01.06 |
---|---|
[Algorithm] 프로그래머스 - 배열 만들기 1 (Kotlin) (0) | 2024.01.06 |
[Algorithm] 프로그래머스 - qr code (Kotlin) (0) | 2023.12.31 |
[Algorithm] 프로그래머스 - 세로 읽기 (Kotlin) (0) | 2023.12.31 |
[Algorithm] 프로그래머스 - 문자열 뒤집기 (Kotlin) (0) | 2023.12.31 |
Comments