[백준] 달팽이 (1913)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 홀수인 자연수 N이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다.
» 출력
N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
7 35 |
49 26 27 28 29 30 31 48 25 10 11 12 13 32 47 24 9 2 3 14 33 46 23 8 1 4 15 34 45 22 7 6 5 16 35 44 21 20 19 18 17 36 43 42 41 40 39 38 37 5 7 |
4 16 |
16 5 6 7 15 4 1 8 14 3 2 9 13 12 11 10 1 1 |
문제 풀이1
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
val dx = intArrayOf(0,1,0,-1)
val dy = intArrayOf(1,0,-1,0)
val N = readLine().toInt()
val target = readLine().toInt()
val route = Array(N) { IntArray(N) { 0 } }
val max = N * N
var direction = 0
var x = 0
var y = 0
var targetX = 1
var targetY = 1
route[y][x] = max
for (i in (max - 1) downTo 1) {
var nx = x + dx[direction]
var ny = y + dy[direction]
if (nx in 0 until N && ny in 0 until N) {
if (route[ny][nx] == 0) {
route[ny][nx] = i
} else {
if (direction == 3) {
direction = 0
} else {
direction++
}
nx = x + dx[direction]
ny = y + dy[direction]
route[ny][nx] = i
}
} else {
if (direction == 3) {
direction = 0
} else {
direction++
}
nx = x + dx[direction]
ny = y + dy[direction]
route[ny][nx] = i
}
if (target == i) {
targetY = ny + 1
targetX = nx + 1
}
x = nx
y = ny
}
route.forEach {
println(it.joinToString(" "))
}
println("$targetY $targetX")
}