CodingTest/Baekjoon

[baekjoon] 백준 1913번(코틀린): 달팽이

JunJangE 2022. 8. 21. 23:29

문제

 

1913번: 달팽이

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

www.acmicpc.net

알고리즘

- 반복문을 통해 달팽이를 움직인다.

- 우/하/좌/상을 현재 길이 만큼 움직인다.

- 움직인 후 달팽이의 위치를 왼쪽 모서리로 움직여준다.

코드

package beakjoon.implementation

import java.io.BufferedReader
import java.io.InputStreamReader
import java.nio.Buffer

fun main(){
    val br = BufferedReader(InputStreamReader(System.`in`))
    val sb = StringBuilder()
    val n : Int = br.readLine().toInt()
    val m : Int = br.readLine().toInt()
    val graph= Array(n){IntArray(n)}
    var num = 1
    var l=0
    var x=n/2
    var y=n/2
    graph[x][y] = 1
    var answer = Pair(x,y)

    val dx = arrayListOf<Int>(0, 1, 0, -1)
    val dy = arrayListOf<Int>(1, 0, -1, 0)
    while (true){

        for (i in 0 until  4){
            for (j in 0 until l){

                x += dx[i]
                y += dy[i]
                num += 1

                graph[x][y] = num



            }
        }




        if (x == 0 && y == 0) {
            break

        }


        x -= 1
        y -= 1
        l += 2




    }
    var mx = 0
    var my = 0
    for(i in graph.indices){
        for(j in graph[i].indices){
            sb.append("${graph[i][j]} ")

            if(graph[i][j] == m){
                 mx = i+1
                 my = j+1
            }
        }
        sb.append("\n")

    }
    sb.append("$mx $my")

    println(sb)


}

github

 
 

GitHub - junjange/KotlinAlgorithm: 내가 푼 코딩 테스트 문제와 해결법(Kotlin)

내가 푼 코딩 테스트 문제와 해결법(Kotlin). Contribute to junjange/KotlinAlgorithm development by creating an account on GitHub.

github.com