TIL #29

loci·2024년 5월 29일
0

TIL

목록 보기
27/103

대충 만든 자판

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을 반환한다.

profile
편리한 개발자

0개의 댓글