프로그래머스- 24

김정현·2023년 4월 11일
0

프로그래머스

목록 보기
24/46

설명이 복잡한데, 간단히 요약하자면 맵의 크기 board를 넘지 않는 선에서 방향키에 따른 배열을 출력하게 하라는 것이였다.

import Foundation

func solution(_ keyinput:[String], _ board:[Int]) -> [Int] {
    var result: [Int] = [0, 0]
    for i in keyinput {
        if i == "left" {
            result[0] -= 1
        } else if i == "right" {
            result[0] += 1  
        } else if i == "up" {
            result[1] += 1
        } else { 
            result[1] -= 1}
    }
     return result 
}

이렇게 작성했는데 작동은 했으나 board에 관한걸 지정해주지 않아 정답이 틀린 문제가 발생했다.
그 방식에 대해서 고민 해봤는데 if 문을 사용하기로 했다. 굉장히 길어질거 같긴한데, 우선 해결하는 것도 벅차다.

import Foundation

func solution(_ keyinput:[String], _ board:[Int]) -> [Int] {
    var result: [Int] = [0, 0]
    let maxX = board[0] / 2
    let maxY = board[1] / 2
    for i in keyinput {
        if i == "left" {
           result[0] = max(result[0] - 1, -maxX)
        } else if i == "right" {
          result[0] =  min(result[0] + 1, maxX) 
        } else if i == "up" {
          result[1] = min(result[1] + 1, maxY)
        } else { 
           result[1] = max(result[1] - 1, -maxY)
       }
    }
     return result 
}

우선 max, min이라는 함수를 알아냈다.

max(a, b)     //큰거로 출력
min(a, b)     //작은거 출력

처음엔 보드를 2로 나눈 값을 따로 지정하지않고 실행했더니 정답과 달랐다. 그래서 지정한 후 실행 했더니 오류가 발생하지 않았다.

다들 풀이가 길이가 상당했다. 그 풀이 중 가장 간단해 보였던 풀이는

case와 where을 병합해서 사용한 구문이였다.
forEach는 각 배열 각각 요소에 대해 주어진 클로저를 실행한다.
스위치문으로 switch $0으로 방향키 에따른 case를 생성한다. 그리고 where절을 사용해 board 크기로 최대값을 지정해 x , y값에 대입한다. 미리 배열을 생성하지 않고 x y를 나중에 대입하니 더 편한 것 같다.

0개의 댓글