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

[2023-06-07] 10157 자리배정 (Kotlin)

by joh9911 2023. 6. 7.

 

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

 

10157번: 자리배정

첫 줄에는 공연장의 격자 크기를 나타내는 정수 C와 R이 하나의 공백을 사이에 두고 차례대로 주어진다. 두 값의 범위는 5 ≤ C, R ≤ 1,000이다. 그 다음 줄에는 어떤 관객의 대기번호 K가 주어진다.

www.acmicpc.net

 

문제를 푸는데 30분이 걸렸습니다.

최근에 문제를 많이 안풀다 보니, 실력이 떨어진게 체감이 되네요..

 

package sixtyfourth
import java.io.*
fun main(){
    val br = BufferedReader(InputStreamReader(System.`in`))
    val (c,r) = br.readLine().split(' ').map{it.toInt()}
    val k = br.readLine().toInt()
    
    val arr = Array(r){Array(c){false} }
    
    var tag = 0
    // 시작 y, x값 설정
    var x = 0
    var y = r - 1
    
    // k값이 크기를 범위를 넘었을 때 0 출력
    if (c*r < k){
        println(0)
    }
    // tag 값에 따라 각 방향 이동
    else{
        for (index in 0 until k){
            arr[y][x] = true
            if (index != k - 1){
                when(tag % 4){
                    0 -> {
                        if (y == 0 || arr[y-1][x]){
                            tag += 1
                            x += 1
                        }
                        else{
                            y -= 1
                        }
                    }
                    1 -> {
                        if (x == c - 1 || arr[y][x + 1]){
                            tag += 1
                            y += 1
                        }
                        else
                            x += 1
                    }
                    2 -> {
                        if (y == r - 1 || arr[y+1][x]){
                            tag += 1
                            x -= 1
                        }
                        else
                            y += 1
                    }
                    3 -> {
                        if (x == 0 || arr[y][x - 1]){
                            tag += 1
                            y -= 1
                        }
                        else
                            x -= 1
                    }
                }
            }
        }
        println("${x+1} ${r - y}")
    }

}

 

 

다시 생각해 보니, 다른 그래프 형 문제 처럼 이동 경로를 배열에 저장할 걸 그랬습니다.

x 이동 배열과, y 이동 배열로 접근을 했다면 더 코드가 깔끔했을 것 같네요.

댓글