문제 링크: 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 이동 배열로 접근을 했다면 더 코드가 깔끔했을 것 같네요.
'알고리즘 > 구현(백준)' 카테고리의 다른 글
[2023-06-09] 16926 배열 돌리기 1 (2) | 2023.06.09 |
---|---|
[2023-06-08] 1417 국회의원 선거 (Kotlin) (0) | 2023.06.08 |
[2023-06-06] 1969 DNA (Kotlin) (1) | 2023.06.06 |
[2023-06-05] 5800 성적 통계 (Kotlin) (0) | 2023.06.05 |
[2023-06-03] 1913 달팽이 (Kotlin) (0) | 2023.06.03 |
댓글