728x90
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
https://github.com/ROUTINE-STUDY/Algorithm
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
문의는 댓글 바람.
문제 출처 :https://www.acmicpc.net/problem/16926
[문제 설명]
풀기 싫어서 미루고 미룬 문제인데 어려웠습니다.
일단 돌리는 방법을 상상도 못한 게 가장 큽니다.
다음에 다시 풀어봐야겠습니다.
[접근 방법]
import java.io.BufferedReader
import java.io.InputStreamReader
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val dy = intArrayOf(0,1,0,-1)
val dx = intArrayOf(1,0,-1,0)
val (N,M,R) = readLine().split(" ").map {it.toInt()}
val array = Array(N){IntArray(M)}
repeat(N) {
array[it] = readLine().split(" ").map { it.toInt()}.toIntArray()
}
var cntOfRepeatedSquare = N.coerceAtMost(M)/2
var k = 0
while (cntOfRepeatedSquare-- > 0) {
var remainRotateNum = R
val rowSize = N-1-k
val columnSize = M-1-k
while (remainRotateNum > 0) {
val firstNum = array[k][k]
var currentY = k
var currentX = k
var directionIdx = 0
while (directionIdx < 4) {
val nextDy = currentY + dy[directionIdx]
val nextDx = currentX + dx[directionIdx]
// 범위 안이면 이동
if (nextDy in k..rowSize && nextDx in k..columnSize) {
array[currentY][currentX] = array[nextDy][nextDx]
currentX = nextDx
currentY = nextDy
} else {
directionIdx++
}
}
array[k+1][k] = firstNum
remainRotateNum--
}
k++
}
val sb = StringBuilder()
array.forEachIndexed{ index, ints ->
ints.forEach {
sb.append(it).append(" ")
}
sb.append("\n")
}
println(sb)
}
[내 답안 수정하기]
728x90
반응형
'알고리즘 문제 풀이 > 다시 봐야할 것들' 카테고리의 다른 글
백준 - 퇴사(Kotlin 완전탐색으로 품) (0) | 2022.02.04 |
---|---|
백준 - DFS와 BFS(Kotlin) (0) | 2022.02.04 |
백준 - ACM 호텔(Java) 주기 (0) | 2022.01.29 |
백준 - 테트로미노 (0) | 2022.01.26 |
백준 - 분산처리 (통과 못하면 처음부터 꼼꼼히 보자) (2) | 2021.12.25 |