티스토리 뷰
코트카타
K번째수
문제
정답
class Solution {
fun solution(array: IntArray, commands: Array<IntArray>): IntArray {
val res = arrayListOf<Int>()
for (command in commands) {
val i = command[0] - 1
val j = command[1] - 1
val k = command[2] - 1
res.add(array.slice(i..j).sorted()[k])
}
return res.toIntArray()
}
}
arrayListOf와 for문을 통해 초기화한 배열요소들을 이용해서 풀었다.
배열의 번지수는 0부터 시작하므로 i, j, k 값에서 각각 1씩 빼줘야 한다.
val res = arrayListOf<Int>()
연산을 적용했을 때 나온 결과를 담을 배열을 arrayListOf<Int>로 선언해준다.
arrayListOf는 요소를 추가하거나 삭제할 수 있으며, 크기를 동적으로 조절이 가능하다.
for (command in commands)
for문에서 배열(commands)로 반복문을 돌리게 되면
command는 배열의 요소를 차례로 가리키게 된다.
res.add(array.slice(i..j).sorted()[k])
'slice()' 함수는 지정한 범위내의 인덱스에 해당하는 요소만 들어있는 배열을 반환한다.
해당 구문은 array에서 i ~ j 번지의 요소들이 담긴 배열을 오름차순 정렬해
그 배열에서 k번지에 있는 값을 res배열에 추가하는 동작을 한다.
return res.toIntArray()
IntArray와 arrayListOf<Int>는 둘 다 배열에 해당하지만 서로 다른 자료형에 해당한다.
res를 solution 함수가 반환하는 자료형에 맞춰서 반환해주면 된다.
IntArray 활용
class Solution {
fun solution(array: IntArray, commands: Array<IntArray>): IntArray {
val res = IntArray(commands.size)
for (n in 0 until commands.size) {
val i = commands[n][0] - 1
val j = commands[n][1] - 1
val k = commands[n][2] - 1
res[n] = array.slice(i..j).sorted()[k]
}
return res
}
}
solution 함수가 반환하는 자료형인 IntArray를 활용해서 풀어봤다.
IntArray는 고정된 크기의 정수배열을 가지게 되고,
해당 배열의 요소를 변경하려면 n번지 값을 하나하나 직접 초기화해줘야 한다.
그렇기 떄문에 '0 ~ commands배열 크기 - 1' 만큼의 범위로 for문을 돌려준다.
Map 활용
class Solution {
fun solution(array: IntArray, commands: Array<IntArray>): IntArray {
return commands.map { command ->
array.slice(command[0] - 1 until command[1]).sorted()[command[2] - 1]
}.toIntArray()
}
}
commands배열에서 map함수를 돌려서 문제를 해결할 수도 있다.
짧고 간결한 코드를 짜고 싶다면 배열을 다루는 문제에선
map 함수를 활용하는 것을 추천한다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 16일차 (가장 가까운 글자 - Kotlin, MBTI 테스트 질문지 화면 기능 구현) (0) | 2024.05.13 |
---|---|
사전캠프 TIL 15일차 (두 개 뽑아서 더하기 - Kotlin) (0) | 2024.05.12 |
사전캠프 TIL 13일차 (문자열 내 마음대로 정렬하기 - Kotlin | MBTI 테스트 질문지 화면 UI) (0) | 2024.05.10 |
사전캠프 TIL 12일차 (시저 암호, 숫자 문자열과 영단어 - Kotlin | MBTI 테스트 시작화면 UI 구현) (0) | 2024.05.09 |
사전캠프 TIL 11일차 (크기가 작은 부분 문자열, 최소직사각형 - Kotlin | 로또 번호 생성기 기능 구현) (0) | 2024.05.08 |