개인 공부/프로그래머스

[프로그래머스] Lv.1 두 정수 사이의 합 swift

임구마🍠 2024. 6. 18. 17:10


 

나의 풀이

func solution(_ a:Int, _ b:Int) -> Int64 {
    return Int64((a < b ? a...b : b...a).reduce(0, +))
}

- 시간이 너무 오래걸리는데..? 고차함수로 풀어서 그런가.. for 문으로 돌려보니

func solution(_ a:Int, _ b:Int) -> Int64 {
    var result = 0
    for i in a < b ? a...b : b...a {
        result += i
    }
    return Int64(result)
}

- for 문이 훨씬 빠름.. 코드가 짧다고 무조건 좋은건 아니군

 

💡 Chat GPT한테 물어본 for - in vs 고차함수

더보기

🙋🏻‍♀️: Swift 언어에서 for-in 반복문과 고차함수를 사용했을 때, for-in 반복문의 실행 속도가 더 빠르던데 이유가 뭐야?

 

🤖: Swift에서 for-in 반복문과 고차함수(map, filter, reduce 등)를 비교할 때, for-in 반복문의 실행 속도가 더 빠른 이유는 주로 다음과 같은 이유들 때문입니다:

  1. 오버헤드 최소화:
    • for-in 반복문은 컴파일 타임에 최적화될 수 있으며, 기본적인 반복 구조를 제공하여 불필요한 오버헤드가 적습니다.
    • 반면, 고차함수는 클로저를 사용하여 함수를 인자로 전달하기 때문에 추가적인 메모리 할당과 호출 오버헤드가 발생할 수 있습니다.
  2. 직접적인 제어:
    • for-in 반복문을 사용하면 반복문 내에서 직접적으로 변수를 제어하고 업데이트할 수 있습니다. 이를 통해 불필요한 객체 생성과 관리 비용을 줄일 수 있습니다.
    • 고차함수는 새로운 배열이나 컬렉션을 생성하여 반환할 수 있기 때문에 메모리 사용량이 늘어나고, GC(Garbage Collection) 오버헤드가 증가할 수 있습니다.
  3. 컴파일러 최적화:
    • for-in 반복문은 Swift 컴파일러가 최적화하기 용이한 구조입니다. 컴파일러는 반복문의 성능을 최적화하기 위해 다양한 기법을 적용할 수 있습니다.
    • 고차함수는 내부적으로 다양한 연산을 수행하므로, 컴파일러가 동일한 수준으로 최적화하기 어려울 수 있습니다.
  4. 코드 가독성 및 유지보수:
    • for-in 반복문은 직관적이고 명시적인 코드 작성이 가능합니다. 이는 코드의 가독성을 높이고, 유지보수하기 쉽게 만듭니다.
    • 고차함수는 함수형 프로그래밍 스타일을 사용하기 때문에 익숙하지 않은 개발자에게는 이해하기 어려울 수 있으며, 이는 디버깅과 유지보수를 어렵게 만들 수 있습니다.

다만, 고차함수는 코드의 간결성과 함수형 프로그래밍의 이점을 제공하기 때문에 상황에 따라 적절히 사용하는 것이 중요합니다. 성능이 중요한 경우 for-in 반복문을 고려할 수 있으며, 코드의 간결성과 가독성이 중요한 경우 고차함수를 사용하는 것이 좋습니다.

 

🙋🏻‍♀️: 라고 하네요! 스타일 차이인 것 같습니닷