본문 바로가기
TIL

240820 TIL | 정렬 알고리즘, swift의 고차함수

by 23g 2024. 8. 20.

0. TIL

잘한 점: 퇴근하고 남아서 열심히 공부를 했다 😆

개선점 : 남는 시간을 좀 더 활용하기 ! 오늘은 컨디션이 안좋아서 시간 활용을 잘하지 못했다.

배운 점: 고차함수를 활용해서 문제 푸는 법을 익혔다.

배운 문법이지만 실제로 적용하는 것을 처음 시도해봤다!

1. 데일리 루틴 ✅ ❌ 

  cs 질문 공부하기 

질문 : 자주 사용되는 정렬 알고리즘(예: 퀵 정렬, 병합 정렬)의 동작 원리와 시간 복잡도를 설명해주세요.

 

답변 :
퀵 정렬 (Quick Sort):
동작 원리: 피벗을 기준으로 작은 값과 큰 값을 나누고, 이를 재귀적으로 정렬.
시간 복잡도: 평균 O(N log N), 최악 O(N^2).

병합 정렬 (Merge Sort):
동작 원리: 배열을 반으로 나누어 정렬한 후, 다시 병합.
시간 복잡도: 모든 경우 O(N log N).


퀵 정렬은 평균적으로 빠르지만 최악의 경우 성능이 저하될 수 있고,

병합 정렬은 안정적인 성능을 보장하지만 추가 메모리 공간이 필요함.

  1일 1커밋

📜 문제 설명

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 
단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 
예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.

⌨️ 입출력 예

✏️ 나의 코드

func solution(_ arr:[Int]) -> [Int] {
    
    var resultArr = arr
    
    if resultArr.count == 1 {
        return [-1]
    }
    var min = resultArr[0]
    
    for i in 0..<resultArr.count{
        if resultArr[i] < min{
            min = resultArr[i]
        }
    }
    resultArr.remove(at: (resultArr.firstIndex(of: min)!))   
    
    return resultArr
}

 

오,, 대환장 파티(머쓱)

이제는 고차함수를 배웠기 때문에 if, for 문 남발보단 좀 더 효율적이고 가독성 좋은 코드를...!

짜고 싶었지만 아직 감이 잘 안잡혀 실패

 

📚 개선 코드

func solution(_ arr:[Int]) -> [Int] {
    
    if arr.count == 1 {
        return [-1]
    }
    
    var min = arr.min()
    
    return arr.filter { $0 != min }
}

 

min()과 filter 사용해서 아주 간단 명료한 코드 작성 성공! ^_^

프로그래머스에서 다른 사용자들 풀이에서 $0 나올 때 마다

나도 얼른 쓰고 싶었는데 드디더 배워서 썼다 ㅎㅎ

swift 문법 강의 듣기

강의 : part 19 메모리 관리