삼각달팽이 (Level2)
link - https://programmers.co.kr/learn/courses/30/lessons/68645
1. 문제 파악하기
- 입력 : 삼각형 한변의 길이 n
- 출력 : 한변의 길이가 n인 정삼각형을 달팽이 처럼 내부로 들어가는 규칙으로 그린후 순서대로 출력한다 (설명하기가 좀 어렵다..)
1
2 9
3 10 8
4 5 6 7
이런경우 출력은 {1, 2, 9, 3, 10, 8, 4, 5, 6 ,7}
2. 아이디어
- n * n의 배열을 생성한다
- 순서대로 방향을 바꿔가며 숫자를 넣는다 (↓ , →, ↖)
1
2 9
3 10 8
4 5 6 7
- 그리고 위부터 순서대로 읽어서 출력한다
3. 풀이
class Solution {
var map = Array<Array<Int>>(1) {Array<Int>(1){-1}}
var dir = arrayOf(arrayOf(1, 0), arrayOf(0, 1), arrayOf(-1, -1))
fun solution(n: Int): IntArray {
var answer = ArrayList<Int>()
map = Array<Array<Int>>(n) {Array<Int>(n){-1}}
map[0][0] = 1
var num = 2
var d = 0
var cX = 0
var cY = 0
while(true) {
var nX = cX + dir[d][0]
var nY = cY + dir[d][1]
if (nX < 0 || nY < 0 ||nX >= n || nY >= n || map[nX][nY] != -1) {
// ㅂㅏㅇㅎㅑㅇ ㅌㅡㄹㄱㅣ
d = (d+1)%3
// next ㄱㅓㅁㅅㅏ
var tX = cX + dir[d][0]
var tY = cY + dir[d][1]
if (tX < 0 || tY < 0 || tX >= n || tY >= n || map[tX][tY] != -1) {
break
}
} else {
map[nX][nY] = num++
cX = nX
cY = nY
}
}
map.map { a ->
a.map { v ->
if(v != -1) {
answer.add(v)
}
}
}
return answer.toIntArray()
}
}
|
cs |
'Programmers' 카테고리의 다른 글
[Programmers] 튜플 - kotlin (0) | 2021.09.01 |
---|---|
[Programmers] 다리를 지나는 트럭 - kotlin (0) | 2021.08.22 |
[Programmers] 소수찾기 - kotlin (0) | 2021.08.18 |
[Programmers] 가장 긴 팰린드롬 - kotlin (0) | 2021.08.11 |
[Programmers] 괄호 회전하기 - kotlin (0) | 2021.07.15 |