Apple is Apple
article thumbnail

문제 설명

머쓱이는 RPG게임을 하고 있습니다. 게임에는 up, down, left, right 방향키가 있으며 각 키를 누르면 위, 아래, 왼쪽, 오른쪽으로 한 칸씩 이동합니다.

 

예를 들어 [0,0]에서 up을 누른다면 캐릭터의 좌표는 [0, 1], down을 누른다면 [0, -1], left를 누른다면 [-1, 0], right를 누른다면 [1, 0]입니다. 머쓱이가 입력한 방향키의 배열 keyinput와 맵의 크기 board이 매개변수로 주어집니다.

 

캐릭터는 항상 [0,0]에서 시작할 때 키 입력이 모두 끝난 뒤에 캐릭터의 좌표 [x, y]를 return하도록 solution 함수를 완성해주세요.


제한 조건

  • board은 [가로 크기, 세로 크기] 형태로 주어집니다.
  • board의 가로 크기와 세로 크기는 홀수입니다.
  • board의 크기를 벗어난 방향키 입력은 무시합니다.
  • 0 ≤ keyinput의 길이 ≤ 50
  • 1 ≤ board[0] ≤ 99
  • 1 ≤ board[1] ≤ 99
  • keyinput은 항상 up, down, left, right만 주어집니다.

입출력 예

keyinput board return
["left", "right", "up", "right", "right"] [11, 11]  [2, 1]
["down", "down", "down", "down", "down"] [7, 9]  [0, -4]

 

코드

class Solution {
    fun solution(keyinput: Array<String>, board: IntArray): IntArray {
        var answer:IntArray = intArrayOf(0,0)
        val maxX = board[0] / 2 
        val maxY = board[1] / 2 
        for(i in keyinput) {
            when (i) {
                "left" -> {
                    if (answer[0] <= -maxX)  continue
                    answer[0]--
                }
                "right" -> {
                    if (answer[0] >= maxX) continue
                    answer[0]++
                }
                "up" -> {
                    if (answer[1] >= maxY) continue 
                    answer[1]++
                }
                "down" -> {
                    if (answer[1] <= -maxY) continue
                    answer[1]--
                }
            }
        }
        return answer
    }
}

풀이

keyinput을 돌며 각 커맨드를 수행하면서 answer에 좌표를 계속 업데이트 해주면된다.

 

중요한 점이 있는데, when 절 각 커맨드 조건문 내의 if 절이다.

 

문제의 조건에 board의 범위를 벗어나면 연산을 무시한다고 하였다.

 

그렇기 떄문에 현재의 answer (업데이트 되고 있는 현재좌표)에 조건문을 걸어 격자판을 벗어났는지 아닌지를 검사하고 벗어났으면 continue를 하여 해당 반복을 건너뛴다.

 

이렇게 keyinput의 마지막까지 수행하면 최종 좌표가 도출된다.

결과

안정적으로 통과한 것을 볼 수 있다.

profile

Apple is Apple

@mjjjjjj