Code Signal -Arcade Kotlin
코드시그널 아케이드 코틀린 풀이
코드시그널 아케이드 Intro 자바 풀이가 끝나고 코틀린 풀이를 올리게 되었습니다.
질문과 틀린부분은 댓글로 남겨주세요. 🎅
글을 참고 하셨다면, 공감, 하트 한번 눌러주시고 가주시면 감사하겠습니다. 🧡💚💘
이웃한 수의 곱을 구하는데, 그중 가장 큰 수를 리턴하라.
풀이.
//코틀린
fun adjacentElementsProduct(inputArray: MutableList<Int>): Int {
//이웃한 수의 곱을 구하는데, 그중 가장 큰 수를 리턴하라.
var max: Int = inputArray[0] * inputArray[1];
for(i in 2 until inputArray.size){
if(max < inputArray[i-1] * inputArray[i])
max = inputArray[i-1] * inputArray[i];
}
return max
}
원래의 자바코드를 보고 작성해서인지 별 다를게 없었다.
fun adjacentElementsProduct(a: List<Int>) = a.zipWithNext(Int::times).max()!!
다른 분의 답안을 보니, 코틀린에 대한 인식이 달라진다.
리스트, 배열에서 두개의 쌍을 골라 원하는 양식으로 압축하여 보여주는 메서드라고 생각하면된다.
Int::times 는 주어진 쌍의 숫자를 times(곱하기) 를 하여 리스트로 만들어준뒤, max()를 통해서 그 배열에서의 최대값을 뽑아내는 코드이다.
단순하게 배열/리스트를 통해서 곱하고 비교해도 되지만, 이러한 메서드를 알고 있다면 간단하게 원하는 형태로 데이터를 포맷하여 사용할 수 있는 매우 유용한 메서드인듯하다.
아래와 같은 방식으로도 사용이 가능하다.
val letters = ('a'..'f').toList()
val pairs = letters.zipWithNext()
println(letters) // [a, b, c, d, e, f]
println(pairs) // [(a, b), (b, c), (c, d), (d, e), (e, f)]
그리고, Int::times 외에도,
- Int::plus
- Int::minus
등 Int에 있는 계산이 가능하다.
그리고, zipWithNext{} 의 형태로도 활용이 가능하다.
val values = listOf(1, 4, 9, 16, 25, 36)
val deltas = values.zipWithNext { a, b -> b - a }
println(deltas) // [3, 5, 7, 9, 11]
이렇게 원하느 위치로 이동시켜 원하는 공식을 대입하여 필터링 할수 있다. 완전 대박이다.
//자바
int adjacentElementsProduct(int[] inputArray) {
int max = inputArray[0]*inputArray[1];
for(int i=2; i<inputArray.length; i++){
if(max < inputArray[i-1]*inputArray[i])
max = inputArray[i-1]*inputArray[i];
}
return max;
}
구리구리다. 자바.
728x90
반응형
'Algorithm > Kotlin' 카테고리의 다른 글
#06_CS Arcade Kotlin >> Make Array Consecutive 2 (0) | 2020.12.29 |
---|---|
#03_CS Arcade Kotlin >> Check Palindrome (0) | 2020.12.22 |
#02_CS Arcade Kotlin >> Century From Year (0) | 2020.12.21 |