Swift 알고리즘 및 언어공부
아니 문제가 왜 이렇게 길어.. 깜짝 놀랐네..
입출력 예시를 보면 더 이해하기 쉽다 !
1. section에 첫 번째 수부터 m만큼 이동 (색칠)
2. cnt에 1 추가
3. 이동한 값이랑 section 두 번째 수랑 비교해서 이미 색칠되었는지 아닌지 확인
4. 색칠되지 않았다면 cnt에 1 추가하는 거 반복
배열로 m 개씩 반복하면서 contain함수로 포함하는지 안 하는지 확인해서 어쩌구 생각했다가, 칠해야 할 부분이랑 아닌 부분 true, false로 지정해서 색칠해 주기.. 이런 거 생각해 봤는데,, 너무 꼬이는 것 같아서 그냥 다 지우고ㅜ 다시 생각해 보니
그냥 section 에서부터 m만큼 색칠해 주면 되잖아ㅏ..? 겹치면 그냥 넘어가고, 색칠 안 해준 section 만나면 색칠해 주자.. 해서 시도..
이렇게 하니까 답이 잘 나오는 것을 볼 수 있음 ! 이렇게 보니까 간단하고,, 쉬워 보이네,,,, 흑,,
ㅎ ㅏ 알고리즘 정말.. 어렵다!!!
import Foundation
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
var paint = 0
var cnt = 0
for i in section {
if paint < i {
cnt += 1
paint = i + m - 1
}
}
return cnt
}
함수로 보면 이렇게 볼 수 있다!
//다른사람의풀이
import Foundation
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
var notPainted = section
var end = 0
var cnt = 0
while !notPainted.isEmpty {
var area = notPainted.removeFirst()
if end >= area {
continue
} else {
end = area + m - 1 // 시작 지점 + 롤러의 길이 - 1
cnt += 1
}
}
return cnt
}
옹 나도 section 배열 색칠된 거 하나씩 삭제하면서 section이 비었을 때 종료하도록 하는 코드 만들고 싶었는데, 이런 식으로 만드셨구나.. notPainted.isEmpty 앞에 느낌표로 배열이 있는 동안 while문 돌리는 코드가 인상적이었음 굳굳..
세상 사람들 정말 똑똒하네.. 어딘가에 true false로 저 문제를 풀어낸 코드도 있겠지.. ?
iOS 숙련 개인 과제 : 위시리스트 앱 만들기
[스파르타 코딩클럽]
저번에 했던 DispathQueue에서 .main과 .global은 무슨 차이일까.. 해서 찾아봤다.
우선 비동기는여러 개의 Thread로 뿌려서 작업을 진행하는데,
DispatchQueue.main.asyn { : 여기서 main은 main thread를 의미한다. ( UI적 코드는 메인에서만 수행 )
DispatchQueue.global() : sub thread를 의미
main thread에서 동기적으로 처리되는 작업이 추가되면 그 작업이 끝나는 동안 UI가 멈춰버린다.
이를 해결하기 위한 서브 스레드가 DispatchQueue.global()인 것 같음!
간단하게 정리하자면 이렇지만 여기 사이트에 굉장히 자세히 나와있어서 굳이었다!
https://dev-workplace.tistory.com/10
Swift DispatchQueue 기본 원리
제가 이해한 내용을 이해하기 쉽게 정리합니다. 혼잣말하는 느낌으로 작성해서 반말로 작성했습니다 ! DispatchQueue를 사용해야하는 이유는 도대체 뭘까?? -> 비동기적으로 처리해야할 데이터(API
dev-workplace.tistory.com
그럼 본격적으로 이제 위시리스트에 담기 부분을 공부해 보자
: 메인 큐의 관리되는 개체 콘텍스트 (즉, coreData의 내용을 관리해 주는 프로퍼티)
이 함수는 위시리스트 담기를 누르면 테이블 뷰에 추가되도록 설정해야 한다
추가해 줬으니 이제 테이블뷰에 표시해 보자
조건에 따라 (버튼 클릭 시 이동) 스토리뷰를 설정해 주려면 코드로 설정해야 하는데, 33일 차 TIL에 보면 코드로 화면을 전환하는 방법이 있는데, 응용해서 해보자
그리고 그전에 만들어놓은 테이블뷰를 사용하기 위해서 스토리보드에 생성한 ViewController를 WishListViewController.swift와 연결하고, 스토리보드 ID 설정해 주기
그리고 버튼 클릭 시 화면을 전환하는 코드
음 이건 다른 이야기긴 하지만,, guard let 문 계속 보다 보니까 전에 면접 볼 때 튜터님이 if let과 guard let의 차이점 알려주시면서 guard let은 else return까지 생각하면 이해하기 좋다 하셨던 거 생각나네... 여기 guard else 보면 죄다 else { return } 이어서.. 하핫 이렇게 코드로 보니까 더 머리에 잘 들어오는 것 같구먼...
자 그럼 이제 WishListViewController 코드를 보자면
우선 여기서는 CoreData에 저장된 현재 데이터를 가져와서 쓰는 것이기 때문에 저장소에 접근할 수 있는 코드가 필요하다
ViewController와 같이 Core Data, AppDelegate에 설정한 저장소에 접근하기 위한 코드 작성
위시 리스트에 담은 상품들의 데이터가 담겨있는 CoreData 상품 데이터를 저장! -> 이 데이터를 테이블 뷰에 출력할 것!
내일 셀 생성하고, 어플을 좀 다듬어야겠다! ㆅㆅ
굳 👍🏻