[TIL] 프로그래머스: 배열 회전시키기

Eden·2024년 12월 26일
2

TIL

목록 보기
78/92
post-thumbnail

문제 설명

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 3 ≤ numbers의 길이 ≤ 20
  • direction은 "left" 와 "right" 둘 중 하나입니다.

입출력 예

numbersdirectionresult
[1, 2, 3]"right"[3, 1, 2]
[4, 455, 6, 4, -1, 45, 6]"left"[455, 6, 4, -1, 45, 6, 4]

첫 번째 실패 코드

func solution(_ numbers:[Int], _ direction:String) -> [Int] {
    var arr = numbers
    if direction == "left" {
        arr.append(Int(arr.first))
        arr.removeFirst()
    } else if direction == "right" {
        arr.insert(Int(arr.last), at: 0)
        arr.removeLast()
    }
    return arr
}

실패 원인

  • Optional 처리 누락:
    • arr.firstarr.lastOptional(Int?) 타입이므로 직접적으로 Int()로 변환 불가
    • Int()BinaryInteger를 요구하지만, Int?는 이에 부합하지 않았다.
  • 함수 호출 오타:
    • arr.removeFirstarr.removeLast에 빈 괄호 () 누락함 ㅠㅠ

간과한 점

  • 배열의 첫 번째 및 마지막 요소를 안전하게 언래핑(if let 또는 guard let)하지 않음.
  • Swift의 기본 문법 및 타입 시스템에 대한 이해 부족

수정된 최종 코드

func solution(_ numbers: [Int], _ direction: String) -> [Int] {
    var arr = numbers
    if direction == "left" {
        if let firstElement = arr.first {
            arr.append(firstElement) // 첫 번째 요소를 뒤에 추가
            arr.removeFirst()        // 첫 번째 요소 삭제
        }
    } else if direction == "right" {
        if let lastElement = arr.last {
            arr.insert(lastElement, at: 0) // 마지막 요소를 앞에 추가
            arr.removeLast()               // 마지막 요소 삭제
        }
    }
    return arr
}

문법 노트

  • if let을 사용하여 Optional 값을 안전하게 언래핑
  • Swift에서 Optional 값은 반드시 처리해야 하며, 강제 언래핑(!)은 런타임 오류를 일으킬 수 있음
  • 배열 메서드(append, insert, removeFirst, removeLast)는 배열을 직접 수정

배운 점

Swift의 타입 안정성: Optional 타입(Int?)과 일반 타입(Int) 간의 변환은 명시적으로 처리해야 한다.
코드 가독성: 안전한 Optional 언래핑을 통해 코드의 신뢰성을 높여야 한다.
함수 호출: 빈 괄호 ()는 생략할 수 없으며, 함수 호출과 속성 참조를 명확히 구분해야 한다.

profile
Frontend🌐 and iOS

0개의 댓글