[Lv. 0] 정수를 나선형으로 배치하기프로그래머스/Level 02023. 4. 24. 16:06
Table of Contents
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181832
난이도 : Level.0
언어 : Kotlin
문제 설명 :
양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.
제한 사항 :
- 1 ≤ n ≤ 30
입출력 예 :
n | result |
4 | [[1, 2, 3, 4], [12, 13, 14 , 5], [11, 16, 15, 6], [10, 9, 8, 7] |
5 | [[1, 2, 3, 4, 5], [16, 17, 18, 19, 6], [15, 24 ,25, 20, 7], [14, 23, 22, 21, 8], [13, 12 ,11 ,10, 9]] |
다른 사람의 풀이 :
https://camel-it.tistory.com/102
해당 게시물을 보고 kotlin으로 바꿔 썼다.
fun main(args: Array<String>) {
println(solution(4))
}
fun solution(n: Int): Array<IntArray> {
val arr = Array(n) { IntArray(n) }
var up = 1
var left = 0
var right = n - 1
var down = n - 1
var di = intArrayOf(0, 1, 0, -1)
var dj = intArrayOf(1, 0, -1, 0)
var direction = 0
var i = 0
var j = 0
arr[i][j] = 1
for (cnt in 1 .. n * n) {
arr[i][j] = cnt
if (direction % 4 == 3 && i == up) {
direction += 1
up += 1
} else if (direction % 4 == 2 && j == left) {
direction += 1
left += 1
} else if (direction % 4 == 0 && j == right) {
direction += 1
right -= 1
} else if (direction % 4 == 1 && i == down) {
direction += 1
down -= 1
}
i += di[direction % 4]
j += dj[direction % 4]
}
return arr
}
'프로그래머스 > Level 0' 카테고리의 다른 글
[Lv. 0] I로 만들기 (0) | 2023.04.25 |
---|---|
[Lv. 0] 특별한 이차원 배열 1 (0) | 2023.04.25 |
[Lv. 0] 특별한 이차원 배열 2 (0) | 2023.04.24 |
[Lv. 0] 정사각형으로 만들기 (0) | 2023.04.24 |
[Lv. 0] 이차원 배열 대각선 순회하기 (0) | 2023.04.24 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!