장점 : 앱을 끄면 삭제되는 AppDelegate 변수들과는 달리, 앱을 삭제하기 전까지는 반영구적으로 저장된다. 내부적으로는 plist 파일을 통해서 저장한다. 기본 자료형까지 바로 사용이 가능하다. [사용법] - 저장할 때 UserDefaults.standard.setValue(id, forKey: "id") - 받아올 때 // String UserDefaults.standard.string(forKey: "") // Bool UserDefaults.standard.bool(forKey: "") // Double UserDefaults.standard.double(forKey: "") // 배열 UserDefaults.standard.object(forKey: "") as? [String] 이런식으로..
첨에는 태그로 처리하려고 이리 저리 옮겨봤었는데, 결론은 callback으로 처리하는게 좋다!! 버튼을 눌렀을 때 콜백을 실행해주는 정도로 해주면 될 것 같다 class LockerMyTableViewCell: UITableViewCell { @IBOutlet var registerButton: UIButton! @IBAction func didTapRegisterButton(_ sender: Any) { tapCallback?() } } 이렇게 클래스 내에 선언해주고, func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { cell.tapCallback = { let alert = UI..
Branch & bound는 한국말로 하면 '분기 한정'이라고 할 수 있는데, 분기를 한정시켜서 쓸데 없는 낭비를 줄이는 방법이다. backtracking보다 나은 방법이라고 하는데, 왜냐면 backtracking은 가보고 진행이 안되면 돌아오는데 branch and bound는 최적해를 찾을 가능성 자체가 없으면 가 보지도 않는 느낌이랄까??? 이게 어떻게 가능한지 한번 살펴보자. 일단 0/1 knapsack problem이 뭔지는 옛날 게시글에서 설명했으니까 패스한다. 이글을 참조하세요 https://sweetdev.tistory.com/528 이런 물건 4개가 있었고, 내 가방의 weight의 한계는 15였다고 해보자. 내가 branch and bound에서 되게 특이하다고 생각했던 점은, 얘는 p..
해밀토니안...! 해밀토니안 자체는 사람 이름이 아니고, '해밀턴'씨가 만들어서 해밀토니안인데 이 아저씨도 약간 다작해서 짜증나는 사람이다. 물리학도 수학도 컴퓨터공학도를 동시에 고통주는 이 능력... 아무튼 해밀토니안 사이클은 다음과 같은 문제이다. 모든 정점을 한번씩 방문하고 첫 지점으로 돌아와야 한다! 그런 길이 존재할까??? (directed graph도 되고 undirected graph도 됨) 다음과 같이 (못그린) 그래프가 있다고 해 보자. 1부터 시작해서 모든 정점을 다 방문하고 다시 1로 돌아오는 path가 있을까?? 이를 위해서 다음과 같은 표를 하나 그렸다. 일단 첫 시작점은 1이니까 1을 써준다. 다음으로 앞에 나오지 않고, 바로 앞 칸과 이어져 있는 정점을 써준다. 이렇게! 마지막..