#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) -> 앨리스 타입(상태: 키, 행동: 키를 변하게 하는 행동)으로 표현
- 클래스 != 타입