문제 링크: 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()
}
'알고리즘 > 구현(백준)' 카테고리의 다른 글
[2023-06-06] 1969 DNA (Kotlin) (1) | 2023.06.06 |
---|---|
[2023-06-05] 5800 성적 통계 (Kotlin) (0) | 2023.06.05 |
[2023-05-30] 2491 수열 (Kotlin) (0) | 2023.05.30 |
[2023-05-27] 1343 폴리오미노 (Kotlin) (0) | 2023.05.27 |
[2023-05-26] 2331 반복수열 (Kotlin) (0) | 2023.05.26 |
댓글