-
자물쇠와 열쇠 (with Kotlin)Programmers Practice/level 3 2025. 6. 26. 10:17
https://school.programmers.co.kr/learn/courses/30/lessons/60059
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
2차원 배열을 deep copy하기 위해서 새로운 객체에 각 행을 clone해서 초기화한다.
class Solution { fun Array<IntArray>.rotate(): Array<IntArray> { val n = this.size val result = Array(n) { IntArray(n) } for (i in 0 until n) { for (j in 0 until n) { result[j][n - 1 - i] = this[i][j] } } return result } fun Array<IntArray>.check(M: Int, N: Int): Boolean { for (x in M until M + N) { for (y in M until M + N) { if (this[x][y] != 1) return false } } return true } fun solution(key: Array<IntArray>, lock: Array<IntArray>): Boolean { val (M, N) = key.size to lock.size val size = 2 * M + N val matrix = Array(size) { IntArray(size) }.apply { for (r in M until M + N) { for (c in M until M + N) { get(r)[c] = lock[r - M][c - M] } } } var rotatedKey = key repeat(4) { rotatedKey = rotatedKey.rotate() for (r in 1 until M + N) { for (c in 1 until M + N) { val cmpMatrix = Array(size) { matrix[it].clone() } for (x in 0 until M) { for (y in 0 until M) { cmpMatrix[r + x][c + y] += rotatedKey[x][y] } } if (cmpMatrix.check(M, N)) return true } } } return false } }
'Programmers Practice > level 3' 카테고리의 다른 글
선입 선출 스케줄링 (with Kotlin) (0) 2025.07.01 풍선 터트리기 (with Kotlin) (0) 2025.06.26 홀짝트리 (with Kotlin) (0) 2025.06.24 봉인된 주문 (with Kotlin) (0) 2025.06.24 2차원 동전 뒤집기 (with Kotlin) (1) 2025.06.24