지렁이처럼 구불구불 데이터가 저장되는 패턴!!
배열이 왼쪽 -> 오른쪽, 오른쪽 -> 왼쪽 이렇게 번갈아가면서 저장되는 패턴...
row % 2로 왼쪽 -> 오른쪽, 오른쪽 -> 왼쪽 패턴을 구분하는게 중요하다.
https://school.programmers.co.kr/learn/courses/30/lessons/389478
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
class Solution {
fun solution(n: Int, w: Int, num: Int): Int {
var col = -1
var row = 0
var xRow = 0
var xCol = 0
//1. 행,열을 구한다.
for (c in 0..n -1) {
row = (c / w)
if (row % 2 == 0) {
//왼 -> 오
col = c % w
} else {
//오 -> 왼
col = (w - 1) - (c % w)
}
if (c + 1 == num) {
xCol = col
xRow = row
}
}
//2. 마지막 열을 이용해, 마지막 행을 포함할것인지를 판단한다.
var answer = (row - xRow) + 1
if (row % 2 == 0) {
//왼 -> 오른
if (xCol > col) { answer -= 1}
} else {
//오른 -> 왼
if (xCol < col) { answer -= 1}
}
println(answer)
return answer
}
}
맨 마지막의 컬럼 좌표와 꺼내려는 박스의 컬럼 좌표를 Row % 2를 통해 (왼 -> 오른, 오른 ->왼) row를 포함해야할것인지, 미포함해야할것인지를 판단해 주는게 중요하다.
알고리즘은 욕심을 부리면 안되는것 같다.
욕심이란, 뭔가 for문안에서, 또는 하나의 로직으로 모든걸 해결하려고 하면 너무 복잡해진다.
따라서, 우선 대상 데이터를 만드는 부분과, 해당 데이터를 가지고, 대상을 찾는 부분으로 나눠서 생각을 해야 좀더 간결해지는것 같다.
멋드러지게 좀더 개선을 하면 좋은데... 우선 위 코드에서는 딱히 개선 여부는 없어보이네..
다른 방법도 한번 생각해 봐야겠다!
30분..걸렸네..ㅠㅠ
이런건 쉬운건데...
'MY스터디' 카테고리의 다른 글
| [스터디] 알고리즘#3 - 유연근무제 (0) | 2026.05.18 |
|---|---|
| [스터디] 알고리즘#1 - 노란불신호등 (0) | 2026.05.16 |
| [스터디] 자바 ScopedValue에 대해서 (0) | 2026.03.22 |
| [스터디] 코틀린에서 infix함수 활용에 대해서 (0) | 2026.03.15 |
