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 |
Tags
- Rxjava Observable
- ar vr 차이
- 안드로이드 유닛 테스트 예시
- jvm 작동 원리
- ANR이란
- 스택 큐 차이
- 서비스 쓰레드 차이
- 자바 다형성
- 안드로이드 레트로핏 crud
- 멤버변수
- 플러터 설치 2022
- 안드로이드 유닛테스트란
- 안드로이드 라이선스
- rxjava disposable
- 안드로이드 유닛 테스트
- 2022 플러터 설치
- android retrofit login
- android ar 개발
- 스택 자바 코드
- 2022 플러터 안드로이드 스튜디오
- 클래스
- 큐 자바 코드
- 객체
- 안드로이드 라이선스 종류
- 서비스 vs 쓰레드
- 안드로이드 레트로핏 사용법
- jvm이란
- rxjava cold observable
- rxjava hot observable
- 안드로이드 os 구조
Archives
- Today
- Total
나만을 위한 블로그
[Algorithm] 백준 - 숫자의 개수 (2577) (Kotlin) 본문
728x90
반응형
먼저 장황하게 풀면 아래와 같다.
fun main() {
val list = arrayListOf<Int>()
repeat(3) {
list.add(readln().toInt())
}
val reduceNum = list.reduce { acc, i -> acc * i }
val intArr = Array(10) { 0 }
reduceNum.toString().mapIndexed { index: Int, c: Char ->
when (c) {
'0' -> intArr[0] += 1
'1' -> intArr[1] += 1
'2' -> intArr[2] += 1
'3' -> intArr[3] += 1
'4' -> intArr[4] += 1
'5' -> intArr[5] += 1
'6' -> intArr[6] += 1
'7' -> intArr[7] += 1
'8' -> intArr[8] += 1
'9' -> intArr[9] += 1
}
}
intArr.forEach {
println(it)
}
}
작동은 하지만 너무 장황하다. 어떻게 개선할 수 있을까?
fun main() {
val numbers = List(3) { readln().toInt() }
val product = numbers.reduce { acc, i -> acc * i }
val intArr = IntArray(10)
product.toString().forEach { char ->
intArr[char.digitToInt()]++
}
intArr.forEach(::println)
}
입력받은 숫자를 리스트에 담는 로직이 다르다. 리스트를 선언하는데 크기는 3이고, 입력받은 값을 숫자로 바꿔서 넣는다.
모든 숫자를 곱해야 하기 때문에 reduce를 사용하는 것과 크기가 10인 정수 배열을 선언하는 것은 동일하다. 그러나 이후 숫자의 등장횟수를 세는 로직이 많이 바뀌었다.
digitToInt()를 사용하고 있는데, 이 함수는 아래와 같은 역할을 한다.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/digit-to-int.html
이 char가 나타내는 십진수를 리턴한다. char가 유효한 십진수가 아니라면 예외가 발생한다. char에 대해 isDigit이 true면 char는 십진수를 나타내는 것으로 간주된다. 이 경우 char의 유니코드 십진수 값이 리턴된다
즉 0~9의 char를 0~9로 변환한다. 그래서 정수 배열에서 각 숫자의 올바른 인덱스에 접근해 1을 더함으로써, 숫자 별 등장횟수를 체크할 수 있다.
체크가 완료되면 정수 배열을 세로로 출력한다. 출력 방식을 메서드 참조 방식으로 바꿨다. 메서드 참조를 모른다면 검색해서 확인해 보자.
반응형
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[Algorithm] 백준 - 음계 (2920) (Kotlin) (0) | 2024.06.06 |
---|---|
[Algorithm] 백준 - 알람 시계 (2884) (Kotlin) (0) | 2024.06.06 |
[Algorithm] 백준 - 최댓값 (2562) (Kotlin) (0) | 2024.06.06 |
[Algorithm] 백준 - 검증수 (2475) (Kotlin) (0) | 2024.06.05 |
[Algorithm] 백준 - 두 수 비교하기 (1330) (Kotlin) (0) | 2024.06.05 |
Comments