SW Test/Programmers

[Programmers] Lv1. λŒ€μΆ© λ§Œλ“  자판(kotlin)

An effort will never betray 😎 2023. 5. 2. 23:15
λ°˜μ‘ν˜•

문제

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

 

 

 

μ˜ˆμ‹œ

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

 

 

풀이

  • targets μ›μ†Œ ν•˜λ‚˜λ‹Ή μ΅œμ†Œ ν‚€λ₯Ό λͺ‡ 번 λˆ„λ₯΄λŠ”지 μ•Œμ•„μ•Ό ν•©λ‹ˆλ‹€.
  • λ¬Έμžμ—΄μ˜ 문자 ν•˜λ‚˜μ”© keymapμ—μ„œ μ‘°νšŒν•˜μ—¬ κ°€μž₯ indexκ°€ μž‘μ€ 것을 택해야 ν•©λ‹ˆλ‹€.
    ν•˜μ§€λ§Œ, 이 λ•Œ λͺ¨λ“  keymap에 찾고자 ν•˜λŠ” λ¬Έμžκ°€ 없을 κ²½μš°λŠ” λ¬Έμžμ—΄ 자체λ₯Ό keymap을 ν†΅ν•΄μ„œ λ§Œλ“€ 수 μ—†λ‹€λŠ” 말과 κ°™μŠ΅λ‹ˆλ‹€.
  • λ”°λΌμ„œ, check λ³€μˆ˜λ₯Ό 톡해 ν•˜λ‚˜μ˜ λ¬Έμžμ—μ„œ 찾을 수 없을 κ²½μš°λŠ” -1을 λ°˜ν™˜ν•˜λ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€.
  • λ¬Έμžμ—΄μ„ 찾을 수 μžˆμ„ λ•Œ fold μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ (index + 1)을 λ”ν•œ 값을 λ°˜ν™˜ν•˜λ©΄ λ©λ‹ˆλ‹€.
import kotlin.math.*

class Solution {
    fun solution(keymap: Array<String>, targets: Array<String>): IntArray = targets.map{ target ->
            var check = true
            val sum = target.fold(0){ acc, ch -> 
                val minIndex = keymap.minByOrNull{ 
                    if(it.indexOf(ch) == -1) Int.MAX_VALUE 
                    else it.indexOf(ch) 
                }?.indexOf(ch) ?: -1
                
                if(minIndex == -1) check = false
                acc + minIndex + 1
            }
            if(check) sum else -1
        }.toIntArray()
}

 

 

μ°Έκ³ 

  • ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 언어인 kotlin의 νŠΉμ„±μ— 맞게 ν•¨μˆ˜λ₯Ό 많이 읡히자 😽
λ°˜μ‘ν˜•