오늘은 무난하게 CS 강의 듣고 정보처리기사 실기 CBT 하나 푸는 평범한 날인데 약간 기쁨이 느껴지는 포인트가 존재했다.
웹 용어 발표 준비하고 듣고 하며 들은 내용을 정보처리기사 문제에서 보고 정보처리기사 공부하며 배운 내용을 CS 강의나 웹 용어 발표에서 보고 하니 '이런 거 배워서 언제 써먹나' 싶었던 마음이 해소되는 느낌이라 소소한 기쁨이 느껴졌다.
(사실 실무 때도 봤고 학교에서도 봤겠지만 다 까먹었거나 수업을 제대로 안들어서 이제야 정상화됐다고 보고 있다.)
여담으로 정보처리기사 실기는 정말 범위가 운좋게 아는 것만 나오지 않는 이상 실패를 점치고 있다. 객관식인 필기가 선녀였다.
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
fun solution(arr1: Array<IntArray>, arr2: Array<IntArray>): Array<IntArray> =
arr1.zip(arr2) { row1, row2 ->
row1.zip(row2) { num1, num2 ->
num1 + num2
}.toIntArray()
}.toTypedArray()
사실 문제를 보자마자 이 방법이 떠오른 건 아니고 이차원 배열 하면 이중 포문으로만 해결해서 짱구를 좀 굴릴 시간이 필요했다. 실무에서도 다차원 배열을 굳이 쓸 일이 없어서 Kotlin 스럽게 어떻게 표현할까?를 고민하다가 나온게 또 zip
이었다. 딱히 하자도 없고 코드도 이쁘니 좋은게 좋은 거다.
다른 분들의 풀이중에서도 다른 느낌이 있어 가져왔다.
Array(arr1.size) { row ->
IntArray(arr1[0].size) { col ->
arr1[row][col] + arr2[row][col]
}
}
Array
를 생성하자마자 바로 람다로 초기화할 수 있는 형식을 지원하고 있었다.
형태는 다음과 같았다:
inline fun <reified T> Array(size: Int, init: (Int) -> T): Array<T>
이렇게 생성하는 것도 꽤 좋은 방법이라 생각이 들었지만 Size
가 정적인 Array
를 생성해서 연산을 처리한다는 점이 아무래도 좀 걸린다. 정적인 것만 보면 Exception
날 것 같다는 생각에 사로잡히는데 사실 문제에선 그럴 일 없게 다 조건을 걸어줬으니 문제될 것도 없긴 하다.