[BOJ 실버4] 달팽이

JIHOON·2022년 5월 12일
0

문제

풀이

  • 많이 본 배열돌리기 같은 구현문제입니다 가운데 부터 규칙을 찾아 방향을 바꿔가면서 배열값을 채우고 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()
}
profile
https://github.com/Userz1-redd

0개의 댓글