안녕하세요. 오늘은 프로그래머스 삼각 달팽이 문제를 풀어보겠습니다.
삼각 달팽이 문제는 완전 생 구현으로 문제를 해결하였습니다.
따로 알고리즘을 적용하여 문제를 푸는 방법은 생각해보지 않았습니다.
우선 삼각 달팽이를 그려줄 2중 배열을 만들어줍니다.
var snailArray:[[Int]] = [[Int]](repeating: [Int](repeating: 0, count: n), count: n)
여기에 데이터를 넣고 0 이 아닌 경우만 answer배열에 다시 집어 넣어서 문제를 풀겁니다!
삼각 달팽이는 n-1의 수 만큼 꺽입니다.
그러므로 n개의 직선을 그려주면 됩니다.
n개의 직선의 방향을 미리 정해봅시다.
let direction:[[Int]] = [
[ 0, 1],
[ 1, 0],
[-1,-1]
]
이제 실제로 그려주는 부분입니다. 벽에 부딫히면 방향을 다음방향으로 바꿔줍시다!
for _ in 0..<n {
while true{
let nextX = currentX + direction[currentDirection][0]
let nextY = currentY + direction[currentDirection][1]
if nextX >= n || nextY >= n || nextX < 0 || nextY < 0 {
currentDirection = (currentDirection + 1) % 3
break
}
if snailArray[nextY][nextX] != 0 {
currentDirection = (currentDirection + 1) % 3
break
}
currentData += 1
currentX = nextX
currentY = nextY
snailArray[currentY][currentX] = currentData
}
}
마지막으로 answer배열에 정답을 순서대로 집어넣어주면 문제가 해결됩니다.
for i in snailArray {
for j in i {
if j != 0 {
answer.append(j)
}
}
}
전체 코드를 보여드리겠습니다.
import Foundation
let direction:[[Int]] = [
[ 0, 1],
[ 1, 0],
[-1,-1]
]
func solution(_ n:Int) -> [Int] {
var snailArray:[[Int]] = [[Int]](repeating: [Int](repeating: 0, count: n), count: n)
var answer:[Int] = [Int]()
var currentX = 0
var currentY = 0
var currentDirection = 0
var currentData = 1
snailArray[0][0] = currentData
for _ in 0..<n {
while true{
let nextX = currentX + direction[currentDirection][0]
let nextY = currentY + direction[currentDirection][1]
if nextX >= n || nextY >= n || nextX < 0 || nextY < 0 {
currentDirection = (currentDirection + 1) % 3
break
}
if snailArray[nextY][nextX] != 0 {
currentDirection = (currentDirection + 1) % 3
break
}
currentData += 1
currentX = nextX
currentY = nextY
snailArray[currentY][currentX] = currentData
}
}
for i in snailArray {
for j in i {
if j != 0 {
answer.append(j)
}
}
}
return answer
}
오늘은 여기까지이며, 질문이 있으면 댓글로 남겨주세요!😊
오늘도 좋은 하루 되세요!
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 위클리 챌린지 교점에 별 만들기 with Swift (0) | 2022.02.10 |
---|---|
[프로그래머스] Summer/Winter Coding(~2018) 영어 끝말잇기 with Swift (0) | 2022.02.04 |
[프로그래머스] 월간 코드 챌린지 시즌2 2개 이하로 다른 비트 with Swift (0) | 2022.01.28 |
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 프렌즈4블록 with Swift (0) | 2022.01.27 |
[프로그래머스] 위클리 챌린지 피로도 with Swift (0) | 2022.01.26 |