[Kotlin] ๋‚ด์  (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜) : zip(), map(), .indices
๋ฐ˜์‘ํ˜•

 

 

 

 

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/70128

 

 

 


 

์„ฑ๊ณต ์ฝ”๋“œ

 

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        val length = a.size - 1
        var sum = 0
        for(i in 0 .. length){
            sum += a[i] * b[i]
        }
        return sum
    }
}

 


 

์„ค๋ช…

 

  1. val length = a.size - 1
    a์™€ b๋Š” ๊ฐ™์€ ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ๊ธธ์ด๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด .size ํ”„๋กœํผํ‹ฐ๋ฅผ ์ด์šฉํ•œ๋‹ค.
    -1์„ ํ•œ ์ด์œ ๋Š” for๋ฌธ์„ ๋Œ๋ฆด ๋•Œ size๋งŒํผ ์ฐพ์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์œ„์น˜์˜ ๋ฐฐ์—ด์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘)
    -1์„ ํ•˜์ง€ ์•Š๊ณ  for๋ฌธ์—์„œ .. ๋Œ€์‹  until์„ ์จ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
  2. for(i in 0 .. length) { sum += a[i] * b[i] } 
    0๋ถ€ํ„ฐ a.size - 1 ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ๋‘ ๋ฐฐ์—ด์˜ ์—˜๋ฆฌ๋ฉ˜ํŠธ ๊ณฑ์„ ์‹œํ–‰ํ•œ๋‹ค.
    ์ฐธ๊ณ ๋กœ length์—์„œ -1์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ArrayIndexOutOfBoundsException ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  3. return sum
    ์ด๋ ‡๊ฒŒ ๊ตฌํ•œ sum์„ ๋ฆฌํ„ดํ•œ๋‹ค.

 


 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

 

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        return a.zip(b).map { it.first * it.second }.sum()
    }
}
  • a.zip(b)
    ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด a์™€ b๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ง์ง€์–ด ํŽ˜์–ด(pair)๋กœ ๋ฌถ๋Š”๋‹ค.
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ์ธ๋ฑ์Šค ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ๋“ค๋ผ๋ฆฌ ์ง์ง€์–ด์ง„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • map { it.first * it.second }
    ๊ฐ ํŽ˜์–ด์— ๋Œ€ํ•ด์„œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. it์€ ํ˜„์žฌ ์ดํ„ฐ๋ ˆ์ด์…˜์—์„œ์˜ ํŽ˜์–ด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. it.first๋Š” ํŽ˜์–ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ, it.second๋Š” ํŽ˜์–ด์˜ ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • sum()
    ์ƒ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ๋”ํ•˜์—ฌ ์ดํ•ฉ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

 

๐Ÿ’ก zip

val list1 = listOf("a", "b", "c")
val list2 = listOf(1, 2, 3)
val zipped = list1.zip(list2)
println(zipped) // ์ถœ๋ ฅ: [(a, 1), (b, 2), (c, 3)] ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ๋‘ ๊ฐœ์˜ ์ปฌ๋ ‰์…˜์„ ์Œ์œผ๋กœ ๋ฌถ์–ด์ค€๋‹ค.
  • ๊ฐ ์ปฌ๋ ‰์…˜์—์„œ ๋™์ผํ•œ ์ธ๋ฑ์Šค ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ๋“ค๋ผ๋ฆฌ ํŽ˜์–ด(pair)๋ฅผ ๋งŒ๋“ค์–ด ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿ’กmap

val numbers = listOf(1, 2, 3, 4, 5)
val squaredNumbers = numbers.map { it * it }
println(squaredNumbers) // ์ถœ๋ ฅ: [1, 4, 9, 16, 25]
  • ๊ฐ ์š”์†Œ๋ฅผ ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜์— ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ธฐ์กด ์ปฌ๋ ‰์…˜์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์ ์šฉ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

class Solution {
    fun solution(a: IntArray, b: IntArray): Int {
        var answer = 0
        for (i in a.indices)
            answer += (a[i] * b[i])
        return answer
    }
}
  • ์ „์ฒด์ ์œผ๋กœ ๋‚ด ํ’€์ด์™€ ๋น„์Šทํ•˜๋‚˜, for๋ฌธ์— ๋ฒ”์œ„์—์„œ a.indices ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ–ˆ๋‹ค.

 

๐Ÿ’ก.indices

val list = listOf("a", "b", "c")
for (i in list.indices) {
    println("Index $i: ${list[i]}")
}
  •  ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน๋ณ„ํ•œ ํ”„๋กœํผํ‹ฐ
  • ์ปฌ๋ ‰์…˜์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฒ”์œ„(Range)๋ฅผ ์ œ๊ณต
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ปฌ๋ ‰์…˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
    (for ๋ฃจํ”„์—์„œ ์ปฌ๋ ‰์…˜์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜, ์ปฌ๋ ‰์…˜์˜ ์ผ๋ถ€ ์š”์†Œ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ)

 

 

 

class Solution {
    fun solution(a: IntArray, b: IntArray): Int = a.mapIndexed { index, it -> it * b[index] }.sum()
  • mapIndexed { index, it -> it * b[index] }
    mapIndexed ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์™€ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜
    ์—ฌ๊ธฐ์„œ๋Š” a ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ it๊ณผ ํ•ด๋‹น ์ธ๋ฑ์Šค index์— ๋Œ€ํ•ด it * b[index]๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑ
    ์ฆ‰, a ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์™€ b ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ์ธ๋ฑ์Šค ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ ๋ฆฌ์ŠคํŠธ์— ๋‹ด์Œ
  • sum()
    ์ƒ์„ฑ๋œ ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ๋”ํ•˜์—ฌ ์ดํ•ฉ์„ ๊ณ„์‚ฐ
  • ๋žŒ๋‹คํ•จ์ˆ˜์˜ ์šฉ๋ฒ•์„ ๋ณด๊ณ  ๋‹ค์‹œ ๋ณต์Šตํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T