[BOJ 실버4] ZOAC 3 Kotlin
문제
풀이
-
자칫하면 풀이가 엄청 길어질 수 있는 문제인데 최대한 깔끔하게 짜려고 노력했다. 각 문자별로 좌표를 다 저장하면 코드가 너무 지저분해질거 같아 우선 자음 모음 Array를 별도로 생성하고 Map에 Key로 문자, Value로 좌표(Pair)를 저장하여 풀이 하였다.
-
각 문자가 자음인지 모음인지 판단하고 계산하고 문자를 누르는 시간 1을 추가하는 것을 반복하여 풀이
-
이런 구현문제를 중점적으로 해야할 것 같다. 특히 채점 결과가 안나오는 코테에서 히든테케에서 자주 걸리는거 같다
코드
import java.lang.Math.abs
val consonant = charArrayOf('q','w','e','r','t','a','s','d','f','g','z','x','c','v')
val vowel = charArrayOf('y','u','i','o','p','h','j','k','l','b','n','m')
val map = HashMap<Char,Pair<Int,Int>>()
fun main() = with(System.`in`.bufferedReader()){
var a =0
var b =0
for(t in consonant){
map.put(t,Pair(a,b++))
if(t=='t'||t=='g'){
a++
b=0
}
}
a = 0
b = 5
for(t in vowel){
map.put(t,Pair(a,b++))
if(t=='p'){
a++
b=5
}
if(t=='l'){
a++
b=4
}
}
var (curLeft,curRight) = readLine().split(" ").map{it[0]}
val s = readLine()
var ans=0
for(t in s){
if(consonant.contains(t)){
ans += (getDistance(t,curLeft)+1)
curLeft = t
}
else{
ans += (getDistance(t,curRight)+1)
curRight = t
}
}
println(ans)
}
fun getDistance(a : Char, b: Char) : Int{
val pointA = map[a]
val pointB = map[b]
return abs(pointA!!.first-pointB!!.first)+abs(pointA!!.second-pointB!!.second)
}
Author And Source
이 문제에 관하여([BOJ 실버4] ZOAC 3 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihoon97/BOJ-실버4-ZOAC-3-Kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)