문제
풀이
- 많이 본 배열돌리기 같은 구현문제입니다 가운데 부터 규칙을 찾아 방향을 바꿔가면서 배열값을 채우고 x=0, y=0에서 멈추면 쉽게 처리할 수있습니다. 코드가 좀 지저분하네요
코드
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() = with(System.`in`.bufferedReader()) {
val bw= BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val num = readLine().toInt()
var target = 1
var x = n/2
var y = n/2
var board= Array(n){
IntArray(n){0}
}
board[x][y] = 1
var cur = 1
var case = 0
var cnt = 0
var cntDirection = 0
var ansX = -1
var ansY = -1
while(true){
if(board[x][y]==num){
ansX = x
ansY = y
}
if(x==0&&y==0){
break
}
when(case){
0 -> board[--x][y] = ++cur
1 -> board[x][++y] = ++cur
2 -> board[++x][y] = ++cur
3 -> board[x][--y] = ++cur
}
cnt++
if(cnt==target){
if(cntDirection==0) {
case = (case + 1) % 4
cntDirection++
}
else if(cntDirection==1){
case = (case + 1) % 4
cntDirection = 0
target++
}
cnt = 0
}
}
board.forEach{
it.forEach{t -> bw.write("${t} ")}
bw.write("\n")
}
bw.write("${ansX+1} ${ansY+1}")
bw.flush()
}