대충 만든 자판
target의 값이 keymap의 요소들 중 같은 문자열 중 최소 인덱스들을 다 더한값을 반환한다. 다 입력하지 못 할 경우 -1을 반환한다.
반복문에서 조건에 맞는 값을 map에 추가해서 targets안 문자열들의 index를 key로 keymap의 각 요소에서 몇 번째인지 저장하고 최소인 값을 가져와 answer에 추가해주는 식으로 풀었다. 그런데 값이 없을때 반환해야하는 -1을 예외처리해주어야 하는데 -1을 반환하면 정상값들이 다른답으로 나와서 이부분에서 아직 풀지못해 내일 다시 볼 예정.
class Solution {
fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
var answer: IntArray = intArrayOf()
var count = 0
for( target in targets){
var result = mutableMapOf<Int, MutableList<Int>>()
for(key in keymap){
for( i in target.indices){
for (j in key.indices){
if(target[i] == key[j]){
if(result.containsKey(i)){
result[i]?.add(j + 1)
} else {
result[i] = mutableListOf(j+1)
}
break
}
}
}
}
var temp = 0
for(i in 0 until targets[0].length){
val minValue = result[i]?.minOrNull()
if(minValue != null){
temp += minValue
}
}
answer += temp
}
if (answer[0] == 0){
answer[0] = -1
}
return answer
}
}
반례 : ["ABCDE", "FGHIJ"], ["ZABCDE"], return [-1]
한개라도 작성할수없으면 -1을 리턴해야한다.
class Solution {
fun solution(keymap: Array<String>, targets: Array<String>): IntArray {
var answer: IntArray = intArrayOf()
var count = 0
for( target in targets){
var result = mutableMapOf<Int, MutableList<Int>>()
for(key in keymap){
for( i in target.indices){
for (j in key.indices){
if(target[i] == key[j]){
if(result.containsKey(i)){
result[i]?.add(j + 1)
} else {
result[i] = mutableListOf(j+1)
}
break
}
}
}
}
var temp = 0
for(i in 0 until targets[0].length){
val minValue = result[i]?.minOrNull()
if(minValue != null){
temp += minValue
}
}
answer += temp
for(i in 0..targets[0].length){
if (!result.contains(i)){
answer = intArrayOf(-1)
return answer
}
}
}
return answer
}
}
for안에두면 중간에 -1을 리턴해버려서 정상값들이 또 안나오게됨
다른사람의 풀이
class Solution {
fun solution(keymap: Array<String>, targets: Array<String>): IntArray =
targets.map { str ->
str.map { c -> keymap.map { it.indexOf(c) + 1 }
.filterNot { it < 1 }
.let { list ->
if (list.isEmpty()) -1
else list.minOf { it }
}
}.let { if ( it.contains(-1)) -1 else it.sum() }
}.toIntArray()
}
c("A,B,C")의 Index+1을 가져온다.
if (list.isEmpty()) -1 비어있으면 -1을추가시키고
{ if ( it.contains(-1)) -1 else it.sum() }여기서 -1이있으면 -1을 반환한다.