본문 바로가기
Algorithm/Kotlin

[프로그래머스 • 코틀린] 행렬의 덧셈 #12950

by 키윤 2023. 11. 17.

#12950

🎄 Question ?

https://school.programmers.co.kr/learn/courses/30/lessons/12950

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        var answer = arrayOf<IntArray>()
        return answer
    }
}

🧩 Thought Process

  1. arr1과 arr2의 배열 크기가 무조건 같아야하기 때문에 arr1과 arr2의 공통 배열 크기를 row에 저장하기
  2. arr1의 첫번째 엘리먼트 배열의 크기를 column에 저장하기
  3. array는 immutable(수정 불가)하므로 리스트로 바꾸어줘야하기 때문에 텅빈 리스트 만들기. 이때 List 에 들어가는 엘리먼트는 IntArray 사용! 즉 mutableListOf<IntArray> 이용
  4. 배열 안에 있는 배열도 리스트로 바꾸어줘야하기 떄문에 listInside라는 리스트 만들기. 이 리스트에 들어가는 엘리먼트는 정수형이므로 mutableListOf<Int> 사용해주기.
  5. for 문을 사용해서 가장 바깥쪽 배열의 첫번째 엘리먼트부터 하나씩 값 가져오기
  6. for 문 한번더 사용해서 배열 안에 있는 배열의 엘리먼트를 각각 가져와서 arr1과 arr2의 값들을 더하기
  7. 그 값을 각각 listInside 리스트에 추가해주기
  8. 배열 안에 있는 배열의 엘리먼트를 모두 더했다면 listInside 리스트를 ListOfList의 첫번째 엘리먼트로 더해주기. 이때 리스트를 배열로 바꾸어주는 함수 이용해 줘야한다!
  9. 가장 바깥쪽 배열의 인덱스가 바뀔때 listInside 리스트를 초기화해주기 (이것도 for문 이용했는데 리스트를 비우는 함수가 있는지 찾아보기 !!!!!!!!!!) -> clear() 함수 사용해주면 됨!
class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        val row = arr1.size
        val column = arr1[0].size
        var listOfLists = mutableListOf<IntArray>()
        var listInside = mutableListOf<Int>()
        for (i in 0 until row) {
            for (j in 0 until column) {
                listInside.add(arr1[i][j] + arr2[i][j])
            }
            listOfLists.add(listInside.toIntArray())
            for (k in 0 until column) {
                listInside.remove(k)
            }
        }
        return listOfLists.toIntArray()
    }
}

에러 뜸..

아무래도 toIntArray의 엘리먼트는 array여야하는데 엘리먼트가 array여서 에러가 뜬거 같다. typedarray로 바꾸니 문제 해결되었다.

https://stackoverflow.com/questions/73107126/what-is-typed-array-in-kotlin

스택오버플로우에 typedarray에 대한 설명이랑 Intarray & array<INt>의 차이가 생긴 이유와 마지막으로는 어느 배열보단 리스트 사용을 추천한다고 나와있다.

에러는 전부 해결했는데 문제는 다 틀렸다.. 띠용

배열 안에 있는 배열의 크기가 일정하지 않은 경우도 존재하나보다. column 사이즈 찾는 코드를 for문 안에 넣어야겠다.

🎀 Answer

class Solution {
    fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> {
        val row = arr1.size
        var listOfLists = mutableListOf<IntArray>()
        var listInside = mutableListOf<Int>()
        for (i in 0 until row) {
            var column = arr1[i].size
            for (j in 0 until column) {
                listInside.add(arr1[i][j] + arr2[i][j])
            }
            listOfLists.add(listInside.toIntArray())
            listInside.clear()
        }
        return listOfLists.toTypedArray()
    }
}

해결 완!! >..<

🎁 Result

 

🏆 Comment

재밌다재밌어 :)