본문 바로가기
반응형

분류 전체보기109

[Algorithm/Programmers] 가장 큰 정사각형 찾기 Swift 가장 큰 정사각형 찾기 Level2 문제 풀이: 이 문제는 처음에 완전탐색으로 접근했다가 푸는 방법을 모르겠어서 해설을 참고했다. Dynamic Programming을 이용해서 문제를 풀어야 한다. n이라고 써져 있는 1을 기점으로 박스친 곳에서 최소의 숫자를 구해서 n에 더해준다. 그런 식으로 값을 모두 구하면서 제일 큰 값을 구한다. 그리고 그 값의 제곱을 하면 넓이가 나오게 된다. 코드: import Foundation func solution(_ board:[[Int]]) -> Int { var board = board var result = 0 if board.count == 1 { return 1 } for i in 1.. 2021. 1. 14.
[Algorithm/Programmers] 피보나치 수 피보나치 수 Level 2 문제 풀이: n이 2보다 크거나 같다는 전제하에 f(n) = f(n-1) + f(n-2) 공식을 이용해서 n번째 피보나치 수를 구하면 된다. 같지 않다면 n을 리턴한다. 재귀로 풀면 시간초과가 뜨기 때문에 반복으로 풀어야 한다. DP를 공부하고 있기 때문에 DP를 적용하고 forEach문을 써보는 습관을 기르고 있다. 코드: import Foundation func solution(_ n:Int) -> Int { return fibo(n) } func fibo(_ n: Int) -> Int { var nums: [Int] = [0, 1] guard n >= 2 else { return n } (2...n).forEach { nums.append((nums[$0-1]+nums[$.. 2021. 1. 14.
[Algorithm/Programmers] 프린터 프린터 Level2 문제 풀이: 1. 인덱스와 우선순위를 쌍으로 배열에 저장한다. 정렬한 우선순위를 다른 배열에 저장한다. 2. 첫번째 쌍의 우선순위와 정렬한 우선순위의 첫번째 값과 비교한다. 3. 우선순위가 같다면 카운트를 증가시키고 정렬한 우선순위 첫번째를 제거한다. 3-1. 쌍의 인덱스가 원하는 인덱스와 같다면 카운트 값을 리턴한다. 4. 우선순위가 같지 않다면 마지막에 다시 삽입한다. 코드: import Foundation func solution(_ priorities:[Int], _ location:Int) -> Int { var result = 0 var list = [(Int, Int)]() var pList = priorities.sorted(by: >) for (i, priority) .. 2021. 1. 14.
[Algorithm/Programmers] 스킬트리 Level 2 스킬트리 문제 풀이: 1. 나열된 스킬중에서 스킬트리에 있는 문자열만 추출하여 저장한다. 2. 추출한 문자열과 스킬트리의 문자열을 길이만큼 비교한다. 3. 같은 개수를 구해서 리턴한다. 코드: import Foundation func solution(_ skill:String, _ skill_trees:[String]) -> Int { var result = 0 for skills in skill_trees { let lst = skills.filter { skill.contains($0) } let check = skill.prefix(lst.count) result += lst == check ? 1 : 0 } return result } 문제: programmers.co.kr/lear.. 2021. 1. 14.
[iOS] 시뮬레이터에서 할 수 없는 것들 시뮬레이터에서 할 수 없는 것들에 대해서 정리해보겠습니다. 시뮬레이터는 효율성 좋은 도구지만 맥에서 실행되기 때문에 맥의 자원(CPU, memory 등)을 이용합니다. 그렇기 때문에 실제 아이폰 기기보다 빠르게 동작할 수 있습니다. 결과적으로, 시뮬레이터로는 실제 아이폰 기기와 같이 정확한 테스트를 할 수 없습니다. 또한, 사용자의 손 대신 마우스와 키보드를 이용해서 앱을 사용하기 때문에 손으로 동작했을 때의 문제점을 알 수 없는 경우가 있습니다. 이 뿐만 아니라, 하드웨어와 API 차이가 있으며 앱을 테스트하는데 영향을 끼칠 수 있습니다. 하드웨어 차이 Motion 지원(가속과 회전) 오디오와 비디오 입력(카메라와 마이크) 근접 센서 (조도) 기압(고도)계 주변 광 센서 (자동 밝기 조절) API 차이.. 2021. 1. 12.
[iOS] Frame과 Bounds의 차이 먼저 frame이란 슈퍼 뷰(상위 뷰)의 좌표 시스템에서 뷰의 위치와 크기를 나타내는 사각형입니다. 반면, bounds는 자신의 좌표 시스템에서의 뷰의 위치와 크기를 나타내는 사각형입니다. 말로만 봐서는 이해가 안 되기 때문에 직접 view의 frame과 bounds를 출력해봤습니다. 초록색 뷰를 Safe Area의 좌측 상단과 우측 하단에 맞췄을 때 frame의 x, y 좌표가 바뀌는 것을 볼 수 있었지만 bound의 x,y 좌표는 바뀌지 않는 것을 볼 수 있습니다. 이를 통해 frame은 상위 뷰를 기준으로 위치를 정해줄 때 사용할 수 있다는걸 알았습니다. bound는 (0,0)을 디폴트로 정해져 있고 값을 변경하게 되면 아래 사진처럼 초록색 뷰가 새로 그려지는 것을 볼 수 있습니다. 그래서 boun.. 2021. 1. 12.
[iOS] UNUserNotificationCenter를 이용해서 로컬 푸시하기! iOS앱에서 로컬 노티피케이션을 푸시하기 위해서 UNUserNotificationCenter를 사용해보겠습니다. UNUserNotificationCenter는 앱 또는 앱의 확장에 대한 알림과 관련된 활동을 관리하기 위한 중심 객체라고 합니다. alert, badge, sound를 통해 사용자에게 알림을 주고 알림을 스케쥴링할 수 있습니다. 먼저 사용자에게서 권한을 얻어야 합니다. func requestNotiAuth() { let authOptions = UNAuthorizationOptions(arrayLiteral: .alert, .badge, .sound) UNUserNotificationCenter .current() .requestAuthorization(options: authOptions).. 2021. 1. 5.
[iOS] User Notification 로컬과 원격 알림은 앱에서 새로운 데이터를 사용할 수 있게 되면 사용자에게 알리는 방법입니다. 앱이 Foreground에서 실행되지 않는 경우(Background)에도 알림을 사용할 수 있습니다. 로컬 알림은 앱이 알림 세부 정보를 로컬로 구성하고 해당 세부 정보를 시스템에 전달한 다음 앱이 Foreground에 있지 않을 때 알림 전달을 처리합니다. 특정 시간 또는 특정 지리적 위치에 도달했을 때 사용자에게 알리는 캘린더와 할 일 목록 앱과 같은 앱에 적합합니다. 원격 알림은 앱 데이터의 일부 또는 전체가 회사 서버에서 관리되는 경우에 적합합니다. 원격 알림을 사용하여 사용자의 장치에 알림을 푸시할 수 있습니다. 예를 들어, 메시징 앱은 원격 알림을 사용하여 새 메시지가 도착하면 사용자에게 알립니다. .. 2020. 12. 29.
[iOS] Label에 취소선 긋기 ToDo 앱을 만들다가 Label에 취소선을 긋는 방법을 알아봤습니다. 할 일이 완료되면 제목에 취소선을 그어서 표시할 때 사용할 수 있습니다. extension String { // 취소선 긋기 func strikeThrough() -> NSAttributedString { let attributeString = NSMutableAttributedString(string: self) attributeString.addAttribute(NSAttributedString.Key.strikethroughStyle, value: NSUnderlineStyle.single.rawValue, range: NSMakeRange(0,attributeString.length)) return attributeString.. 2020. 12. 24.
[Algorithm/Programmers] 가장 큰 수 문제 풀이: 1. String으로 숫자를 합치고 Int로 변환하여 정렬한다. 2. 수가 모두 0일 때는 0으로 출력한다. 3. 정렬된 배열을 String으로 합쳐서 출력한다. 코드: import Foundation var numbers = [6, 10, 2] //var numbers = [3, 30, 34, 5, 9] func solution(_ numbers:[Int]) -> String { let sortedNums = numbers.sorted() { Int("\($0)\($1)")! > Int("\($1)\($0)")!} if sortedNums[0] == 0 { return "0" } return sortedNums.reduce("") {$0 + String($1)} } print(solutio.. 2020. 12. 18.
반응형