본문 바로가기
TIL

240903 TIL | 트리 자료구조, 최대공약수와 최소공배수

by 23g 2024. 9. 3.

0. TIL

잘한 점: 퇴근 후에 남아서 공부를 했다! 현재 시각 9시 20분...퀭 🫠

개선점 : 오늘 업무 전, 중, 후 버린 시간이 너무 많다. 컨디션 issue가 있긴 했지만 체력 관리해서 더 집중하기

배운 점: 앞으로 함수 / 기능을 나눠서 구현해보자

1. 데일리 루틴  

  cs 공부

질문 : 트리 자료구조의 종류(예: 이진 트리, 이진 탐색 트리, AVL 트리)을 설명해주세요.

 

답변 : 트리 자료구조는 계층적인 데이터 구조로 여러 종류가 있습니다. 

주요 트리 자료구조와 그 특징을 요약하면 다음과 같습니다

이진 트리: 각 노드가 최대 두 개의 자식을 가지는 기본 트리 구조.


이진 탐색 트리 (BST): 왼쪽 자식 노드는 부모보다 작고, 오른쪽 자식 노드는 부모보다 큰 트리. 평균적으로 O(log n)의 시간 복잡도를 가집니다.


AVL 트리: 노드의 서브트리 높이 차이가 1 이하로 유지되도록 자가 균형을 유지하는 트리.


레드-블랙 트리: 노드가 색상을 가지며, 삽입과 삭제 시 균형을 유지하는 자가 균형 이진 탐색 트리.


힙: 최대값 또는 최소값을 빠르게 찾기 위해 사용되는 완전 이진 트리.


트라이 (Trie): 문자열이나 키를 효율적으로 저장하고 검색하는 특수한 트리.


이들은 각각 특정 용도와 성능을 위해 설계되었으며, iOS 개발에서도 다양한 상황에서 사용됩니다.


  1일 1커밋

📜 문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

⌨️ 입출력 예

✏️ 나의 코드

func solution(_ n:Int, _ m:Int) -> [Int] {
  
    var min = 0
    var max = 0
    var maxNum = n < m ? m : n
    for i in 1...maxNum{
        if n % i == 0 && m % i == 0{
            max = i
        }
    }
    
    for i in 1...maxNum{
        for j in 1...maxNum{
            if n * i == m * j{
                min = m * j
                return [max, min]
            }
        }
    }
    return [max, min]
}

 

공식이 기억이 안나서 노가다로 구현한 코드 (쩝)

 

📚 개선 코드

func solution(_ n:Int, _ m:Int) -> [Int] {
    var gcdNum = gcd(n, m)
    var lcmNum = n * m / gcd(n, m)
    return [gcdNum, lcmNum]
}

func gcd(_ n: Int, _ m: Int) -> Int {
    return m == 0 ? n : gcd(m, n % m)
}

 

공식을 알고나서 적용한 코드

간단하게 구현할 수 있었다.

 

여지껏 제출한 코드는 한 함수 안에 기능을 정의했었는데

(물론 쉬운 문제라 가능했던)

이렇게 나눠서 구현하니 가독성이 좋아진 느낌


  swift 강의

는 오늘은 생략