ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스][2022 KAKAO TECH INTERNSHIP][Kotlin] 행렬과 연산
    프로그래머스 2023. 2. 14. 13:35
    728x90
    import java.util.*
    
    class Solution {
        fun solution(rc: Array<IntArray>, operations: Array<String>): Array<IntArray> {
            var answer: Array<IntArray> = rc
            var Left = ArrayDeque<Int>()
            var Mid = ArrayDeque<ArrayDeque<Int>>()
            var Right = ArrayDeque<Int>()
    
            //데이터 입력
            for(i in 0 .. rc.size-1){
                var temp = ArrayDeque<Int>()
                for(j in 0 .. rc[i].size-1){
                   if(j == 0) Left.add(rc[i][j])
                   else if(j == rc[i].size-1) Right.add(rc[i][j])
                   else temp.add(rc[i][j])
                }
                Mid.add(temp)
            }
    
            operations.forEach {
                if(it == "Rotate"){
                    Mid.peekFirst().addFirst(Left.pollFirst());
                    Right.addFirst(Mid.peekFirst().pollLast());
                    Mid.peekLast().addLast(Right.pollLast());
                    Left.addLast(Mid.peekLast().pollFirst());
    
                } else {
                    Left.addFirst(Left.pollLast());
                    Mid.addFirst(Mid.pollLast());
                    Right.addFirst(Right.pollLast());
                }
            }
    
    
            for(i in 0 .. rc.size-1){
                var j = 0
                answer[i][0] = Left.pollFirst()
                j++
                var temp = Mid.pollFirst()
                while(!temp.isEmpty()){
                    answer[i][j++] = temp.pollFirst()
                }
                answer[i][j] = Right.pollFirst()
            }
    
    
            return answer
        }
    }

    해당 문제는 Deque를 사용하여 풀 수 있는 문제 였습니다.

    저도 처음에는 공부가 부족하여 MutableList를 사용하여 코드를 작성 하였었으나 효율성에서 모두 시간초과가

    발생하여 당혹스러웠던 적이 있었습니다.

    코드의 주요 포인트는 그림을 빌려 표현하자면 각 행마다 첫번째 값을 Left 가운데 있는 값들을 Mid 끝에 있는 값들을 Right의 Deque 및 Deque<Deque> 로 저장하여 입력되는 operations 의 값에 따라 변형을 시켜 최종 정답을 알아내는 것 입니다.

    하기는 상기 코드의 실행 결과 입니다.

    테스트 1 통과 (0.10ms, 60.4MB)
    테스트 2 통과 (0.71ms, 58.6MB)
    테스트 3 통과 (0.50ms, 62.1MB)
    테스트 4 통과 (0.57ms, 59.1MB)
    테스트 5 통과 (4.06ms, 69.1MB)
    테스트 6 통과 (4.98ms, 69.2MB)
    테스트 7 통과 (3.64ms, 65.6MB)
    테스트 8 통과 (2.56ms, 65.5MB)
    테스트 9 통과 (3.18ms, 67.1MB)
    테스트 10 통과 (2.97ms, 65.9MB)
    효율성 테스트
    테스트 1 통과 (41.89ms, 101MB)
    테스트 2 통과 (43.30ms, 101MB)
    테스트 3 통과 (37.90ms, 99.8MB)
    테스트 4 통과 (68.75ms, 115MB)
    테스트 5 통과 (78.89ms, 113MB)
    테스트 6 통과 (71.29ms, 116MB)
    테스트 7 통과 (56.81ms, 97.7MB)
    테스트 8 통과 (53.35ms, 99.7MB)
    테스트 9 통과 (60.69ms, 97.4MB)
Designed by Tistory.