코틀린(Kotlin)/프로그래머스

[프로그래머스/코틀린(Kotlin)] K번째 수

초보왕보초 2023. 11. 24. 20:25
728x90

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()로 오름차순 정렬해 놓고 인덱스만 뽑으면 되는 거였다

자기가 떠올린 코드가 몇 시간째 안 되면 새로운 코드가 있을 거라는 생각을 항상 해보자.. 집착을 버리도록 하자..

728x90