문제
풀이
좌표 (1, 1)부터 시작하여 순서대로 표를 채워가도록 코드를 구성하였다. while문을 사용하여 표를 역순으로 채워준다. 다음 좌표에 숫자가 이미 채워져 있거나 탐색 범위를 벗어나는 경우 달팽이 모양으로 숫자를 채울수 있도록 방향을 바꿔준다.
코드
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val size = br.readLine().toInt()
val num = br.readLine().toInt()
val map = Array(size){ IntArray(size) }
var x = 0
var y = 0
var dir = 0
var cur = size*size - 1
var ans = arrayOf(1, 1)
val dx = arrayOf(1, 0, -1, 0) // 이동 방향
val dy = arrayOf(0, 1, 0, -1) // 이동 방향
map[x][y] = size*size // (1, 1) 좌표
while (true) {
val nx = x + dx[dir]
val ny = y + dy[dir]
if(nx < 0 || nx >= size || ny < 0 || ny >= size || map[nx][ny] != 0) { // 탐색 범위를 벗어나거나 이미 채워져 있는 경우
dir++
if(dir == 4) dir = 0
} else { // 이동, 숫자 채워주기
x = nx
y = ny
map[x][y] = cur--
}
if(cur == num-1) ans = arrayOf(x+1, y+1) // 입력받은 정수의 좌표
if(cur == 0) break
}
val sb = StringBuilder()
for(i in 0 until size) {
for(j in 0 until size) {
sb.append("${map[i][j]} ")
}
sb.append("\n")
}
sb.append("${ans[0]} ${ans[1]}")
bw.write(sb.toString())
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 11047번: 동전 0 - Kotlin[코틀린] (0) | 2024.04.01 |
---|---|
[백준] 5052번: 전화번호 목록 - Kotlin[코틀린] (0) | 2024.03.27 |
[백준] 11501번: 주식 - Kotlin[코틀린] (0) | 2024.03.20 |
[백준] 13301번: 타일 장식물 - Kotlin[코틀린] (0) | 2024.03.17 |
[백준] 1647번: 도시 분할 계획 - Kotlin[코틀린] (0) | 2024.03.13 |