[BOJ, Swift] 1021 - 회전하는 큐 ( with 덱(Dequeue) )
·
PS (Problem Solving)
1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 추가하는 건 맨 뒤에서, 빼는 건 양쪽 방향에서 해줄 수 있는 큐가 필요하다. 덱(double ended queue)을 구현해주면 되는데, 해당 문제에서는 양방향으로 추가해줄 필요가 없어서 기존에 구현했던 큐를 일부 수정, 변형하였다. 회전하는 큐 구현 struct Queue { var left = [Int]() var right = [Int]() var count: Int { left.count + right.count } var isEmpty: Bool ..
[자료구조, Swift] 힙(Heap) 구현하기
·
Data Structures and Algorithms
Swift같은 개발 언어 중에는 힙, 큐, 덱같이 기본적으로 다른 언어에서 제공해주는 라이브러리가 따로 있지 않다. 따라서 직접 구현해줘야 한다. 알아야 될 것 1. 완전 이진트리로 부모 노드를 탐색하려면, 시작 인덱스를 1부터 시작해야 한다. 2. 힙은 우선순위 큐를 위한 자료형이다. 3. 우선순위 큐의 목적은 값을 추가할 때 부모 노드에 최댓값 or 최솟값을 넣기 위함이다. 4. 따라서 입, 출력을 할 때만 연산이 수행되고, 전체 힙의 값을 확인하면 오름차순이나 내림차순으로 정렬되지 않을 수 있다. struct Heap { var heap: Array = [] // 초기화 1. 아무 것도 넣지 않을 때 init() { } // 초기화 2. 시작부터 넣을 때 init(_ data: [Int]) { he..
[Dev, iOS] Storyboard 없이 첫 화면을 구성하는 법
·
Dev/iOS
storyboard로 개발을 하는게 더 편리하고  쉽지만, 가끔은 SnapKit 라이브러리를 활용하여 코드로 화면을 짤 수도 있습니다. Project를 생성하고, 기본으로 포함되어있는데 ViewController에 바로 개발을 할 수는 있지만, 굳이 필요 없는 무거운 파일들을 앱에 포함시킬 필요는 없어요. 1. ViewController 삭제 2. Info.plist > Information Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Name 삭제 3. Ctrl + N -> 새로운 VC 생성 4. SceneDelegate에 해당 코드 작성func..
[Dev, iOS] 백그라운드 진입 시 민감한 정보 가리기
·
Dev/iOS
금융 등 개인 정보를 담는 앱들은 백그라운드에서 앱 화면을 가리는 기능을 사용한다.iOS 13 미만을 지원하는 앱에서는 appDelegate에서,이상의 버전을 지원하는 앱에서는 sceneDelegate에서 해당 메소드들을 구현해주자. // 액티브 상태가 되었을 경우(다시 앱으로 돌아왔을 때) func sceneDidBecomeActive(_ scene: UIScene) { callBgImage(false) } // 홈 바를 쓸어 올리거나 홈버튼을 두번 눌렀을 경우 func sceneWillResignActive(_ scene: UIScene) { } // 백그라운드 상태였다가 돌아왔을 때 func sceneWillEnterForeground(_ scene: UIScene) { ..
[Dev, iOS] 배경을 Gradient로 색칠하기
·
Dev/iOS
let gradientView = CAGradientLayer()gradientView.frame = bgView.bounds // bgView는 그라데이션을 덮을 superView에 해당let colors: [CGColor] = [ // 해당 부분에 그라데이션을 넣을 색상을 입력 (오름차순으로 표현됌)]gradientView.colors = colors// 그라데이션의 시작점과 끝점을 좌표로 표현, 0은 0을, 1은 maximum X/Y point를 의미gradientView.startPoint = CGPoint(x: 0.5, y: 0.0)gradientView.endPoint = CGPoint(x: 0.5, y: 1.0)// 할당하면 끝bgView.layer.addSublayer(gradientView)
[Dev, iOS] 디테일한 다크모드 적용하기
·
Dev/iOS
다크모드를 이용하는 방법은 여러가지가 있지만, 본인의 app target이 13.0 이상을 지원하고 있다면 Asset에서 image set을 다크, 라이트 모드에 따라 지원해주면 쉽게 해결 가능합니다.필자의 경우도 13.0 이상의 앱을 개발중이기에 위와 같은 방법으로 상당 부분 해결하였지만, 문제는 해당 문제를 코드로 구현한 부분에서는 시스템 자체 모드 변경에 맞게 다크 모드로 바로 변경이 되지 않더군요.해당 문제는override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {        super.traitCollectionDidChange(previousTraitCollection)              ..
[Dev, iOS] segue로 넘겨 받은 데이터를 다시 전달하는 법
·
Dev/iOS
여러 블로그를 보아도 부모 뷰 -> 자식 뷰로 뷰 전환이 일어날 때 클래스 내에 override func prepare()를 활용해 데이터를 전달하는 방법만 있지,자식 뷰에서 부모 뷰로 다시 데이터를 받는 방법을 찾긴 어렵더군요. 대리자를 활용하여 데이터를 전달하면 되는데, 저도 초보 수준이라 구현이 쉽지 않았습니다. 해당 기능을 구현하는 데에 저 포함 여러 초보 개발자분들이 고생하실 것 같아서 한 번 작성해 봅니다. 먼저 prepare()와 segue 방식을 이용하여 부모 뷰에서 자식 뷰로 데이터를 전달하는 것 까지 구현이 완료된 기점부터 설명하니 이점 참고해주시길 바랍니다. (제가 설명하는 예시에서 homeVC는 부모 뷰를, bookMarkVC는 자식 뷰를 의미하고, 전달하는 데이터 형식은 문자열 배..
[Dev, iOS] iOS 앱에 카카오 애드핏(Kakao AdFit) 연동 및 구현하기
·
Dev/iOS
구글 애드몹을 연동해놓은 앱이 있는데 해당 앱이 국내 유저 기반이기도 하고, 카카오 애드핏 광고가 더 예쁘고 가지런해 보이더군요. 그래서 구글 애드몹을 버리고(?) 카카오 애드핏으로 갈아타기로 마음먹었습니다. 확실히 구글 애드몹이 사용자 수가 많아서인지 금방 구현하는 법을 찾을 수 있었는데 카카오 애드핏은 없어서 구현하는 김에 포스팅을 작성해보렵니다. 해당 포스팅은 카카오 애드핏 공식 GitHub 문서를 참고하여 작성하였습니다. https://github.com/adfit/adfit-ios-sdk/wiki/배너-광고-연동 1. 먼저 카카오 애드핏 사이트에 접속, 가입(카카오 계정 연동 가능) 해주시고, 아래 절차를 밟으시면 됩니다. 광고 단위명은 그냥 사용자 마음대로 설정하시면 돼요. * 현재 앱에서는 ..
100두산
'swift' 태그의 글 목록