fun solution(park: Array<String>, routes: Array<String>): IntArray {
val directionX = intArrayOf(0,1,0,-1) // N,E,S,W
val directionY = intArrayOf(-1,0,1,0)
var currentX = -1
var currentY = -1
for(parkI in park.indices) {
for(parkJ in park[parkI].indices) {
if(park[parkI][parkJ] == 'S') {
currentX = parkJ
currentY = parkI
break;
}
}
if(currentX >= 0)
break;
}
for(route in routes) {
val splitedRoute = route.split(" ")
val direction = splitedRoute[0]
val distance = splitedRoute[1].toInt()
val directionIndex = when(direction) {
"N" -> 0
"E" -> 1
"S" -> 2
"W" -> 3
else -> -1
}
if(validateMovement(currentX, currentY, distance, directionIndex, park)) {
currentX += directionX[directionIndex] * distance
currentY += directionY[directionIndex] * distance
}
}
return intArrayOf(currentY, currentX)
}
fun validateMovement(currentX: Int
, currentY: Int
, distance: Int
, directionIndex: Int
, park: Array<String>): Boolean{
val directionX = intArrayOf(0,1,0,-1)
val directionY = intArrayOf(-1,0,1,0)
// 최대 범위 체크
val lastX = currentX + (directionX[directionIndex] * distance)
val lastY = currentY + (directionY[directionIndex] * distance)
if(lastX !in park[0].indices || lastY !in park.indices)
return false
// 이동 간 장애물 체크
for(numMoved in 1..distance) {
val movedX = currentX + (directionX[directionIndex] * numMoved)
val movedY = currentY + (directionY[directionIndex] * numMoved)
if(park[movedY][movedX] == 'X')
return false
}
return true
}
풀이 과정
1. park배열 탐색하면서 시작지점 확인
2. route의 타당성 검사(validateMovement)
2,1. 이동하는 마지막 좌표가 범위를 벗어나는지 확인
2.2. route에 따라 directionX / directionY로 방향을 정해 한칸씩 이동하면서 장애물이 있는지 확인
3. route가 타당하면 이동
4. 마지막 route까지 2~3과정 반복
포인트
- 방향에 따른 배열에 인덱스 접근을 다르게 하기 위해 directionX / directionY 배열 사용
- 방향에 따라 when절을 통해 directionIndex이 결정되고 directionX / directionY의 인덱스에 사용
'TLI > 코드카타' 카테고리의 다른 글
2024.06.07 TIL 코트카타 75번(최댓값과 최솟값) (0) | 2024.06.07 |
---|---|
2024.06.06 TIL 코트카타 74번(신고 결과 받기) (0) | 2024.06.06 |
2024.06.04 TIL 코트카타 72번(달리기 경주) (0) | 2024.06.04 |
2024.06.03 TIL 코트카타 71번(개인정보 수집 유효기간) (0) | 2024.06.03 |
2024.05.31 TIL 코트카타 68번(햄버거 만들기) (0) | 2024.05.31 |