1. 오전일정 : 정렬 느껴보기
[알고리즘 정의]
문제 해결을 위해 정해진 일련의 절차
- 조원들과 함께 10개의 숫자를 랜덤으로 정하고, 정렬을 진행하는 활동을 하였다.
2. 오후일정 : 알고리즘
- Swift에서 사용하는 알고리즘은 Timsort이다. 설명은 아래 블로그를 참고했다.
https://zeddios.tistory.com/648
[정렬 알고리즘]
퀵정렬 : 분할 정보(divide and conquer) 방법을 통한 리스트를 정렬한다.
https://www.youtube.com/watch?v=3San3uKKHgg
위 동영상을 기반으로 우리조의 퀵정렬 알고리즘을 단계별로 작성해 보았다.
(원본) 4 8 3 1 9 2 5 6 7 10 -> 기준 4, 오른쪽 10부터 왼쪽으로 비교값
(1단계) 2 8 3 1 9 4 5 6 7 10 -> 비교하다 2를 발견하여 스위치 후 비교값을 2옆에 8에게 토스
(2단계) 2 4 3 1 9 8 5 6 7 10 -> 기준 4와 8을 비교, 8과 스위치 후 비교값을 8옆에 9에게 토스
(3단계) 2 1 3 |4| 9 8 5 6 7 10 -> 기준 4와 비교값 9부터 왼쪽으로 비교, 1을 발견하여 스위치
여기까지 4의 자리가 고정되고, 4보다 작은 숫자들의 집합, 4보다 큰 숫자들의 집합을 똑같은 형식으로 재귀형으로 반복하면 된다.
버블정렬 : 두 인접한 원소를 검사하여 정렬한다.
(원본) 4 8 3 1 9 2 5 6 7 10
(1단계) 4 3 8 1 9 2 5 6 7 10
(2단계) 4 3 1 8 9 2 5 6 7 10
...
(N단계) 4 3 1 8 2 5 6 7 9 10
위 N단계 까지 인덱스 1,2 -> 2,3 -> 3,4 ~ 9,10까지 원,투,쓰리,포 버블~버블~ 해서 2개의 인접한 원소들끼리 오른쪽으로 끝까지 도는 것을 최종적으로 정렬할 때까지 반복하는 것이다. 확실히 퀵정렬보다 쉽고 약간 무제한 반복이라는 느낌이 든다.
[Swift 문법]
- 위프트 언어에서는 '=' 기호 사용시 양쪽으로 공백이 없으면 에러(공백이 없으려면 양쪽 다 없어야 됨)
- 구조체, 클래스, 열거형옵셔널은 변수가 값을 전혀 저장하지 않을 수도 있다는 것을 나타내준다 -> 어떤 타입이든 옵셔널로 만들 수 있음
따라서 옵셔널로 정의할 경우 let이 아닌 var로 선언하여 값이 들어가서 변경될 수 있다는 것을 알려줘야 한다.
1. If let 이라는 문법이 따로 있음. 관련 내용은 아래 github에 잘 작성해주셨기 때문에 가져왔다.
https://gist.github.com/monadis/f8e3b9d3bb7fd16161e10666aa205fec
아래 코드를 해석하면서 'if let'을 설명해 보도록 하겠다.
if let name = optionalName {
greeting = "Hello, \(name)"
print("\(greeting)")
}
if let name = optionalName {
greeting = "Hello, \(name)"
print("\(greeting)")
} else {
print("no name")
}
if let name = optionalName -> optionalName의 값을 강제로 가져오고, optionalName의 값이 nil이면 if let문을 빠져나가고(뒤에 else가 있다면 else 실행), nil이 아니라 실제 값이 있으면 name으로 만들어서 처리하라는 말이다.
PS.
[String?]이랑 [String]? 차이점
import Foundation
enum City: String {
case SanFrancisco = "San Francisco"
case NewYork = "New York"
case Paris,Seoul,London
func greetMessage() -> String {
switch self {
case .SanFrancisco:
return "Hello, this is SanFrancisco"
case .NewYork:
return "Hello, this is NewYork"
case .Paris:
return "bonjour"
case .Seoul:
return "annyeonghaseyo"
case .London:
return "Hello, this is London"
default:
return "Hi"
}
}
}
let myFavCity: City = City.Seoul
print("\(myFavCity.greetMessage())")
3. 오늘의 리뷰
오늘 오전부터 오후 3시까지 알고리즘 수업듣고, 오후 늦게 Swift 문법에 대한 강의를 듣기 시작하면서 정말 졸려 죽을거 같았다.... 캠 켜놓고 졸고... 그래서 오후에 진행된 Swift 문법에 대해서는 Swift 공식 문서를 보면서 스스로 공부하는 시간을 더 가져야 할 것 같다.
영어 스터디도 가입할거구, Swift 기초 스터디도 가입할거구, 또 뭘 해야 좋은 개발자로 성장할 수 있을지 고민해 봐야겠다.
5일차에 가장 고민이 되는 것은 하루종일 강의 + 조원 회고 + 스터디 + 자기개발 이렇게 하고싶은 마음은 굴뚝같으나 2n년을 살아온 피도 덜마른 인생경험 상 열정은 좋으나 휴식이 없는 계획은 절대 장기적으로 성공할 수 없다는 것이다.
따라서 내 휴식시간을 보장하기 위해 얼마나 많은 시간을 여기저기서 긁어올 수 있냐는 건데ㅋㅋㅋㅋ 이미 너무 풀 수업과 일정이여서 어디서 가져와야 할지 모르겠다는 것이 문제,,,
'멋쟁이사자처럼 앱스쿨 1기' 카테고리의 다른 글
[멋쟁이사자처럼] 앱스쿨 1기 - Playgorund 문제풀이&옵셔널 타입&Swift 연산자 (7일차 22.09.22) (0) | 2022.09.22 |
---|---|
[멋쟁이사자처럼] 앱스쿨 1기 - 컴퓨터 기본지식&데이터타입 (6일차 22.09.21) (2) | 2022.09.21 |
[멋쟁이사자처럼] 앱스쿨 1기 - 스프린트회고&Swift 둘러보기(4일차 22.09.19) (0) | 2022.09.19 |
[멋쟁이사자처럼] 앱스쿨 1기 - Swift&Design Thinking(3일차 22.09.16) (0) | 2022.09.16 |
[멋쟁이사자처럼] 앱스쿨 1기 - 오리엔테이션&테킷(1일차 22.09.14) (2) | 2022.09.16 |