SWIFT
-
[level2]조이스틱 - swift 풀이알고리즘/프로그래머스 2021. 4. 20. 03:16
문제 https://programmers.co.kr/learn/courses/30/lessons/42860 코딩테스트 연습 - 조이스틱 조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다 programmers.co.kr 이 문제는 역시나 안일하게 생각했다가 큰 코 다친 문제였다. 예시로 나와있지 않은 테스트케이스 찾는게 아직도 어렵다.. 처음에 단순하게 앞에서부터 순서대로 보면서 다음 타겟을 찾고, 거기서 위/아래냐 좌/우냐만 검사해서 풀었더니 이런 결과가 나왔다 🥲 XAAAAAAAYZ 와 같은 경우나 BAAAAIAAAAAAE 의 경우에는 탐색 방향이 ..
-
Collections Types - Setswift 2021. 4. 8. 00:30
swift의 collection type 중 하나인 Set에 대해서 알아봅시다! (오늘부터 존댓말하기로 함^^) https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-ID484 Collection Types — The Swift Programming Language (Swift 5.4) Collection Types Swift provides three primary collection types, known as arrays, sets, and dictionaries, for storing collections of values. Arrays are ordered coll..
-
최단 경로 (다익스트라, 플로이드 워셜 알고리즘)알고리즘/이론 2021. 3. 14. 20:53
본 글은 '이것이 취업을 위한 코딩 테스트다 with 파이썬' 책을 공부하며 기록합니다. 단, iOS를 공부하고 있기 때문에 swift 언어로 코드를 바꿔보고 있습니다. 최단 경로 가장 짧은 경로를 찾는 알고리즘. '길 찾기' 문제 라고도 불린다. 상황에 맞는 효율적 알고리즘이 정해져 있다! 예 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우 보통 그래프를 이용하여 표현되고, 각 지점은 노드로, 지점 간 연결된 도로는 간선으로 표현된다. 보통은 최단 거리를 출력하는 문제가 많다. 대표적 알고리즘 다익스트라 최단 경로 알고리즘 플로이드 워셜 벨만 포드 알고리즘 다익스트라 최단 경로 알고리즘과 플로이드 워셜 알고리즘이 가..
-
부품 탐색 문제를 여러 알고리즘으로 풀어보기 with 시간 복잡도알고리즘/이론 2021. 3. 6. 21:42
문제 N개의 부품 배열에서 M개의 문의 부품이 있는지 확인하여 "yes", "no"를 출력한다. 1 ≤ N ≤ 1,000,000 (100만) 1≤ M ≤ 100,000 (10만) → 최댓값 100만 이진 탐색 이용 let n = Int(readLine()!)! var inputs = readLine()!.split(separator: " ").map { return Int($0)!} print(n) print(inputs) let m = Int(readLine()!)! let targets = readLine()!.split(separator: " ").map { return Int($0)! } inputs.sort() for t in targets { binarySearch(inputs, t) } fu..
-
이진 탐색알고리즘/이론 2021. 2. 24. 21:22
본 글은 '이것이 취업을 위한 코딩 테스트다 with 파이썬' 책을 공부하며 기록합니다. 단, iOS를 공부하고 있기 때문에 swift 언어로 코드를 바꿔보고 있습니다. 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 차례로 확인하는 방법. 데이터의 정렬 여부와 상관없이 앞에 있는 원소부터 하나씩 확인한다. 시간복잡도는 O(N) func sequentialSearch(n: Int, target: String, array: [String]) -> Int { for i in 0.. Int? { if start > end { return nil } let mid = (start + end) / 2 if array[mid] == target { return mid } else ..
-
Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (3) 행위 패턴POP 2021. 2. 24. 21:06
행위 패턴 타입 간에 상호작용이 어떻게 이뤄지는 지 설명. 어떠한 일을 하기 위해 어떻게 서로 다른 타입의 인스턴스 간에 메세지를 보내는지 설명. 책임 연쇄 다른 핸들러에 위임돼 있을지 모르는 다양한 요청을 처리 커맨드 나중에 다른 컴포넌트에 의해 실행될 수 있게 행동이나 매개변수를 캡슐화한 객체를 생성 이터레이터 근본적인 구조는 노출시키지 않고, 객체의 요소에 연속적으로 접근할 수 있도록 한다. 미디에이터 서로 정보를 전달하는 타입 간의 결합도를 줄인다. 메멘토 객체의 현재 상태를 캡쳐하고 나중에 복구할 수 있게 객체를 얼마동안 저장 옵저버 객체의 변경 상태를 알린다. 다른 객체는 이러한 변경 사항에 대한 알림을 받기 위해 이를 구독할 수 있다. 스테이트 내부 상태가 변경될 경우 객체의 행동을 변경하기..
-
Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (2) 구조 패턴POP 2021. 2. 24. 21:03
구조 패턴 어떻게 타입을 더 큰 구조체로 결합할 수 있는가를 서술. 더 큰 구조체는 작업하기 쉽고, 복잡도를 감추기에 좋다. 구조 패턴의 대부분의 패턴들은 객체 간의 연결을 수반한다. 어댑터(Adapter) 공존할 수 없는 인터페이스를 가진 타입을 합께 작동하게 해준다. 브리지(Bridge) 구현체로부터 타입의 추상적 요소를 분리하는데 사용, 둘은 달라질 수 있다. 컴포지트(Composite) 객체 그룹을 하나의 객체로 다룸 데코레이터(Decorator) 객체에 이미 존재하는 메소드에 행위를 추가하거나 오버라이드 퍼사드(Facade) 더 크고 복잡한 코드를 위한 단순화된 인터페이스 제공 플라이웨이트(Flyweight) 생성해야 하는 리소스를 줄이고 많은 유사 객체를 사용하도록 해준다. 프록시(Proxy)..
-
210218 TIL: POP-7.스위프트에서 디자인 패턴 적용 - (1) 생성 패턴TIL 2021. 2. 19. 03:11
POP https://welly-log.tistory.com/17 Swift4: Protocol Oriented Programming - 7.스위프트에서 디자인 패턴 적용 - (1) 생성 패턴 7장 스위프트에서 디자인 패턴 적용 디자인 패턴 공통의 소프트웨어 개발 문제를 확인하고 이를 다루기 위한 전략을 제공. 여러 개발적 문제를 해결하는 방법들이 입증되어 있기 때문에 개발 프 welly-log.tistory.com