본문 바로가기

카테고리 없음

[TIL] 24.04.04 THU

#Morning Algorithm

프로그래머스 N개의 최소공배수

- 해결

- 15분

func lcm(_ a: Int, _ b: Int) -> Int {
    return (a * b) / gcd(a, b)
}

func gcd(_ a: Int, _ b: Int) -> Int {
    var r = 0
    var a = a
    var b = b
    
    while (b != 0) {
        r = a % b
        a = b
        b = r
    }

- 최대공약수, 최소공배수 공식

- DP 로 해결한 값들의 합이나 연관된 값을 구할땐 reduce를 사용해보자

 

#UIkit

 StoryBoard 여러 파일로 작업할 때

 - Storyboard references 를 추가해 현재 스토리보드에서 다른 스토리보드를 알수 있도록 하자

 

#객사오

- 3장

- 추상화: 복잡한 현실의 구조를 명확하게 이해하기 위해 특정 절차나 물체를 생략하거나 감춤으로써 간단화하는 것

    방법 - 1. 구체적인 사물들 간의 공통점만을 취하고 차이점은 버리는 일반화를 통해 단순화

            - 2. 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거하면서 단순화

   

    각각의 객체들을 분류하기(개념과 개념을 통한 객체의 분류 모두 추상화)

        - 개념: 사물이나 객체에 적용가능한 아이디어나 관념

            (심볼: 개념의 이름, 내연: 개념의 정의(객체가 개념에 속하는지를 판단), 외연: 개념에 속하는 모든 객체들의 집합)

        - 개념을 통해 객체들을 그룹으로 분류할 수 있다.

 

        - 프로그래밍 상에서 타입 == 개념

            - 데이터 타입: binary 값을 추상화를 통해 분류한 것

            

            - 타입의 특징

                - 1. 타입은 데이터가 어떻게 사용되느냐에 관한 것(행위에 포커스)

                - 2. 타입에 속한 데이터는 캡슐화되어 외부로부터 감춰짐

   

        - 객체의 타입결정은 객체의 행동에 따라 결정

            - 동일한 책임을 지녀 같은 행동을 하는 객체는 다른 상태를 가지고 있더라도 같은 타입(다형성)

 

        - 일반화/특수화

            - 추상화의 두번째 차원인 특정 부분을 강조하기 위해 불필요한 세부사항을 제거하기 -> 슈퍼타입으로 일반화를 설명

 

        - 시간에 따라 동적으로 변화: 동적모델(객체의 상태 변화를 관찰)

        - 시간에 독립적으로 객체가 가지는 상태와 행동을 표현: 타입모델

    

    - 타입은 수많은 객체의 복잡성을 극복하기 위함(앨리스는 어제 키가 100, 오늘 키가 200) -> 앨리스 타입(상태: 키, 행동: 키를 변하게 하는 행동)으로 표현

 

    - 클래스 != 타입