greenhelix
greenhelix
greenhelix
05-09 02:11
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#04_CS Arcade Kotlin >> Adjacent Elements Product
Algorithm/Kotlin

#04_CS Arcade Kotlin >> Adjacent Elements Product

2020. 12. 23. 12:00

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()!!

다른 분의 답안을 보니, 코틀린에 대한 인식이 달라진다. 

zipWithNext()  이란 

리스트, 배열에서 두개의 쌍을 골라 원하는 양식으로 압축하여 보여주는 메서드라고 생각하면된다. 

 

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
    'Algorithm/Kotlin' 카테고리의 다른 글
    • #07_CS Arcade Kotlin >> Almost Increasing Sequence
    • #06_CS Arcade Kotlin >> Make Array Consecutive 2
    • #03_CS Arcade Kotlin >> Check Palindrome
    • #02_CS Arcade Kotlin >> Century From Year
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바