본문 바로가기
알고리즘/구현(백준)

[2023-06-03] 1913 달팽이 (Kotlin)

by joh9911 2023. 6. 3.

 

문제 링크: https://www.acmicpc.net/problem/1913

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

www.acmicpc.net

 

20분 정도 걸렸습니다. 위쪽, 오른쪽, 아래쪽, 왼쪽 각 방향으로 이동하는 함수를 만들어 풀었습니다.

 

package sixtyfirst
import java.io.*
fun main(){
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))
    val n = br.readLine().toInt()
    val loc = br.readLine().toInt()
    
    // 출력을 위한 배열
    val arr = Array(n){Array(n){0} }
    
    // 홀수를 저장할 배열
    val oddArr = arrayListOf<Int>()
    for (index in 3..999){
        if (index % 2 != 0)
            oddArr.add(index)
    }
    
    // 처음 위치
    var x = n / 2
    var y = n / 2
    
    arr[y][x] = 1
    var num = 2
	
   
    fun firstUp(){
        y -= 1
        arr[y][x] = num
        num += 1
    }
    fun moveRight(oddNum: Int){
        val idx = oddNum - 2
        for (index in 0 until idx){
            x += 1
            arr[y][x] = num
            num += 1
        }
    }
    fun moveDown(oddNum: Int){
        val idx = oddNum - 1
        for (index in 0 until idx){
            y += 1
            arr[y][x] = num
            num += 1
        }
    }
    fun moveLeft(oddNum: Int){
        val idx = oddNum - 1
        for (index in 0 until idx){
            x -= 1
            arr[y][x] = num
            num += 1
        }
    }
    fun moveUp(oddNum: Int){
        val idx = oddNum - 1
        for (index in 0 until idx){
            y -= 1
            arr[y][x] = num
            num += 1
        }
    }
    for (index in oddArr.indices){
        firstUp()
        moveRight(oddArr[index])
        moveDown(oddArr[index])
        moveLeft(oddArr[index])
        moveUp(oddArr[index])
        if (oddArr[index] == n)
            break
    }
    
    var xLoc = 0
    var yLoc = 0
    for (i in arr.indices){
        for (j in arr[i].indices){
            if (arr[i][j] == loc){
                xLoc = j + 1
                yLoc = i + 1
            }

            bw.write("${arr[i][j]} ")
        }
        bw.write("\n")
    }
    bw.write("$yLoc $xLoc")
    bw.flush()
}

 

댓글