programmers.co.kr/learn/courses/30/lessons/68645?language=swift
코딩테스트 연습 - 삼각 달팽이
5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11]
programmers.co.kr
enum 타입으로 위, 아래, 가로 이동을 두고
만들어진 배열을 한칸식 채우면서 이동한 다음 flatMap을 이용해서 순서대로 출력해주면 된다
처음 while문에 조건을 모든 배열에서 0이 있는지 없는지 검사를 했는데 시간초과로 인해 풀리지 않았다.
while tri.flatMap({ $0 }).contains(0) {
}
최종 코드
start: 시작 층
end: 마지막 층
count: 배열에 넣을 값
max: while문이 n번 돌았는지 확인하는 변수
x, y: 배열에 데이터를 넣을때 행과 열 값을 저장하는 변수
func solution(_ n:Int) -> [Int] {
var tri = [[Int]]()
enum Type: String {
case up, down, horizontal
}
var type: Type = .down
for i in 1 ... n {
let a = Array(repeating: 0, count: i)
tri.append(a)
}
var start = 0
var end = n - 1
var count = 1
var max = n
var x = 0
var y = 0
while max > 0 {
switch type {
case .down:
for i in start ... end {
tri[i][x] = count
count += 1
}
x += 1
type = .horizontal
max -= 1
case .up:
for i in (start ... end).reversed() {
y -= 1
tri[i][y] = count
count += 1
}
max -= 1
type = .down
start += 1
case .horizontal:
while tri[end].contains(0) {
y += 1
tri[end][y] = count
count += 1
}
type = .up
start += 1
end -= 1
max -= 1
}
}
return tri.flatMap { $0 }
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 최댓값과 최솟값 (0) | 2021.01.10 |
---|---|
프로그래머스 - 올바른 괄호 (0) | 2021.01.09 |
프로그래머스 - 괄호 변환 (0) | 2021.01.09 |
프로그래머스 - 문자열 압축 (0) | 2021.01.09 |
프로그래머스 - 이중우선순위큐 (0) | 2021.01.08 |