728x90
문제 설명
양의 정수 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]] |
풀이 [ 메모리: 16.7mb, 최대시간: 0.14ms ]
func solution(_ n:Int) -> [[Int]] {
var arr = Array(repeating: Array(repeating: 0, count: n), count: n)
var (y, x) = (0, 0)
for i in 1...(n * n) {
arr[y][x] = i
// 오른쪽으로가자~
if (x+1 < n) && (arr[y][x+1] == 0) {
// 오른쪽으로 움직일 수 있는 조건만들기
if (y-1 >= 0) && (arr[y-1][x] == 0) {
y -= 1
continue
}
x += 1
continue
}
// 내려가자~
if (arr[y][x] != 0) && (y+1 < n) && (arr[y+1][x] == 0) {
y += 1
continue
}
// 왼쪽으로 가자~
if (arr[y][x] != 0) && (x-1 >= 0) && (arr[y][x-1] == 0) {
x -= 1
continue
}
// 다시 올라가자~
if (arr[y][x] != 0) && (y-1 >= 0) && arr[y-1][x] == 0 {
y -= 1
}
}
return arr
}
이게 왜 기초 문제? 라는 느낌의 문제였다.
문제를 처음 마주했을 때 숨이 턱 막히는 느낌.
기본 이차원 배열을 생성하고,
동작 하나하나를 나눠 오른쪽 / 아래 / 왼쪽 / 위 순서로 배열값이 반영되도록 만들었다.
올라가는 동작 중간에 오른쪽으로 이동하지 않도록 조건을 추가하여 마무리..
반응형
'🐣 알고리즘' 카테고리의 다른 글
[프로그래머스] Swift - 추억점수 (LV.1) (0) | 2023.06.12 |
---|---|
[백준] Swift - 12865번: 평범한 배낭 (0) | 2023.06.11 |
[프로그래머스] Swift - 성격유형검사하기 (LV.1) (0) | 2023.06.09 |
[프로그래머스] Swift - 캐시(LV.2) (0) | 2023.06.08 |
[프로그래머스] Swift - 신고결과받기 (LV.1) (0) | 2023.06.07 |
댓글