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
- ANR이란
- rxjava cold observable
- rxjava disposable
- jvm이란
- 안드로이드 os 구조
- 스택 큐 차이
- 객체
- 안드로이드 레트로핏 사용법
- 큐 자바 코드
- 스택 자바 코드
- ar vr 차이
- 자바 다형성
- android retrofit login
- 2022 플러터 설치
- 안드로이드 라이선스
- jvm 작동 원리
- 안드로이드 유닛 테스트 예시
- 플러터 설치 2022
- 클래스
- 안드로이드 레트로핏 crud
- android ar 개발
- 안드로이드 유닛 테스트
- 안드로이드 유닛테스트란
- 서비스 쓰레드 차이
- 멤버변수
- 2022 플러터 안드로이드 스튜디오
- 서비스 vs 쓰레드
- rxjava hot observable
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