array배열의 i번째 숫자부터 j번째 숫자까지 자르고 오름차순 정렬한 후, k번째에 있는 수를 리턴 시키기
예시)
풀이
- forEach{} 사용하여 특정 구문 반복
- sliceArray()를 사용하여 범위를 잘라낸 새 배열 생성
- sort() 사용하여 오름차순 정렬
제출 코드
(코드 보기) - 몇 시간 헤매다가 검색으로 답지와 해석을 봤다..
5) commands.forEach{}를 사용하여 commands 배열의 특정 부분만 반복한다
6) array배열을 sliceArray()로 특정범위(i부터 j까지)를 잘라낸다
( it[0]은 문제의 [i, j, k]가 2, 5, 3이라면 2이다. index는 0부터 시작하니까 -1, until [1]은 1 이전까지니까 -1을 하지 않아도 된다)
7) 잘라낸 배열을 오름차순 정렬한다
8) 비어있는 answer배열에 tmp배열의 k번째 수를 더해준다
( 6을 설명한 것처럼 it[2]는 3인데 index에선 2이므로 -1 해주고 answer에 추가해 준다 )
forEach()
컬렉션 타입의 데이터 개수만큼 특정 구문을 반복 실행할 때 유용하다
fun main() {
val str = "HELLOKOTLIN"
str.forEach {
printIn(it)
}
}
// 출력
H
E
L
L
O
K
O
T
L
I
N
- 인자를 활용할 수 있다
- for문에서 사용하는 break와 continue를 일반적으로는 사용할 수 없다
- 단 forEach문 자체를 run{}에 감싸고 break를 걸고 싶으면 return@run을 적어주면 된다
- continue를 사용하려면 return@forEach를 적어준다
sliceArray()
sliceArray(범위) : 해당 범위에 새로운 배열을 생성한다
(substring()과 비슷하지만 substring은 문자열을 반환하고 sliceArray()는 배열로 반환한다)
문제를 처음 봤을 때 범위지정, 오름차순 후 특정 기준으로 수를 도출한다는 것만 보고 substring과 sortBy를 떠올렸었다
근데 몇 시간 동안 substring(i-1, j-1) / sortBy(k-1)을 여기저기 써봐도 안 돼서 검색을 해봤다..
생각해 보니까 substring은 말 그대로 문자열을 반환하는 거고
sortBy는 굳이 안 쓰고 sort()로 오름차순 정렬해 놓고 인덱스만 뽑으면 되는 거였다
자기가 떠올린 코드가 몇 시간째 안 되면 새로운 코드가 있을 거라는 생각을 항상 해보자.. 집착을 버리도록 하자..
'코틀린(Kotlin) > 프로그래머스' 카테고리의 다른 글
[프로그래머스/코틀린(Kotlin)] 양꼬치 (1) | 2023.12.07 |
---|---|
[프로그래머스/코틀린(Kotlin)] 두 개 뽑아서 더하기 (1) | 2023.11.27 |
[프로그래머스/코틀린(Kotlin)] 문자열 내 마음대로 정렬하기 (1) | 2023.11.23 |
[프로그래머스/코틀린(Kotlin)] 숫자 문자열과 영단어 (0) | 2023.11.22 |
[프로그래머스/코틀린(Kotlin)] 시저 암호 (1) | 2023.11.21 |