본문 바로가기
개발노트/프로그래머스

프로그래머스 캐릭터의 좌표 코틀린

by 시계속세상은아직돌아가는중 2023. 8. 8.

1.문제

https://school.programmers.co.kr/learn/courses/30/lessons/120861

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2.정답

 

1)구현검증

package com.example.answersheet

fun main() {
    val borad = intArrayOf(11, 11)
    var result = intArrayOf(0, 0)

    while (true) {
        var keyinput = readLine()!!.toString()

        when (keyinput) {

            "up" -> {
                if (result[0] < (borad[0] - 1) / 2) result[0]++ else result[0] = (borad[0]-1)/2
               draw(result)
            }

            "down" -> {
                if (result[0] > ((borad[0] - 1) / 2) * -1) result[0]-- else result[0] = (borad[0]-1)/2*-1
                draw(result)
            }

            "righy" -> {
                if (result[1] < (borad[1] - 1) / 2) result[1]++ else result[1] = (borad[1]-1)/2
                draw(result)
            }

            "left" -> {
                if (result[1] > ((borad[1] - 1) / 2) * -1) result[1]-- else result[1] = (borad[1]-1)/2*-1
                draw(result)
            }

        }
    }

}

fun draw(array: IntArray){
    for (i in 0 until array.size){
        print("${array[i]} ")
    }
    println("")
}

2)답

class Solution {
    fun solution(keyinput: Array<String>, board: IntArray): IntArray {
        var result: IntArray = intArrayOf(0, 0)
        
        for (i in keyinput) {
            when (i) {
                "right" -> {
                    if (result[0] < (board[0] - 1) / 2) result[0]++ 
                    else result[0] = (board[0] - 1) / 2
                }
                "left" -> {
                    if (result[0] > ((board[0] - 1) / 2) * -1) result[0]-- e
                    lse result[0] = ((board[0] - 1) / 2) * -1
                }
                "up" -> {
                    if (result[1] < (board[1] - 1) / 2) result[1]++ 
                    else result[1] = (board[1] - 1) / 2
                }
                "down" -> {
                    if (result[1] > ((board[1] - 1) / 2) * -1) result[1]--
                    else result[1] = ((board[1] - 1) / 2) * -1
                }
            }
        }
        
        return result
    }
}

3.고찰

어렵지 않은 문제다.

x,y좌표로 생각해서 이동한다고 생각하면 끝인 문제이며, 초기에 설계를 실수해서 up down right left를 정 반대로 설계했지만, 작동은 하는거닌깐 해당 부분만 고쳤다.

이번 문제에서는 if문의 내용이 한 줄이니 축약해봤다.

 

그런데 중괄호가 있는게 가독성이 더 높지 않나 싶기도하다