프로그래머스

n^2 배열 자르기

끝까지 처음처럼 2022. 9. 27. 14:09
728x90
class Solution {
    fun solution(n: Int, left: Long, right: Long): IntArray {
        var answer: IntArray = intArrayOf()
        var tempList = mutableListOf<Int>()
        var count = 0L
        for(i in 1 .. n){
            if(count >= left / n.toLong() && count <= right / n.toLong()){
                for(j in 0 .. i-1){
                    tempList.add(i)
                }
                for(k in i+1 .. n){
                 tempList.add(k)
                }
            }
            count += 1L    
        }
        //println(tempList)

        for(i in left % n.toLong() .. left % n.toLong() + (right-left) ){
            answer += tempList[i.toInt()]
        }


        return answer
    }
}

해당문제는 풀면서 런타임 에러가 계속 나와 최대한 스스로 생각했을때 중복되는 반복들을 줄이면서 작성을 하였었습니다. 그리고 런타임에러가 간신히 나오지 않을만큼 줄여 통과를 하였었는데, 프로그래머스의 특성 상 문제를 풀게 될 경우

다른사람들이 어떻게 통과하였는지 알 수 있어 다른 사람들의 코드를 보니 저처럼 무식하게 통과하신분은 거의 없으셨습니다. 저의 경우 일단은 LEFT의 값과 RIGHT의 값을 따져 tempList 에 넣고 나서 값을 뽑아 오는 형식으로 작성을 하였는데, 다른 분들은 left의 값과 right 의 값을 가지고 규칙을 찾아 작성을 하셨다는 것을 알게 되었습니다. 해당문제는 풀었을때의 만족감 보다는 작성 후 다른사람들의 코드를 보고 깨닫게 된 점이 더욱 많았던 문제였던 것 같습니다.

코드를 작성하는 사람의 따라서 혹은 사용한 알고리즘 및 정규식 처리에 따라 처리시간이 매우 달라지는 것을 다시금 깨닫게 되었으며, 문제를 풀기에 앞서 최대한 간단하게 풀 수 있는 방법을 더욱 고민하고 생각하게 만드는 문제였습니다.