[Algorithm] 비트마스킹 이론 & BOJ 11723 실습
·
🖥️ Computer Science/Algorithm
https://www.acmicpc.net/problem/11723위 11723을 푸는데, Set으로 풀어서 실패하고아래처럼 20개만 갖는 정수 배열로 0 1 판단을 했더니 실패했다.// 실패한 코드let M = Int(readLine()!)!var array = Array(repeating: 0, count: 20)(0..비트마스킹연산자 설명a & b: ANDa | b: ORa ^ b: XOR~a: NOTa : a를 b비트 만큼 왼쪽으로 옮김 (값 증가)a >> b: a를 오른쪽으로 옮김 (값 감소)할당 연산자|=: 비트 OR 할당 특정 비트를 켜는 것 var bit = 0 // 0000 bit |= (1 &=: 비트 AND 할당 특정 비트를 끄는 것 var bit = 6 // 0110 bi..
[Algorithm] 백준 32350 - Swift 풀이
·
🖥️ Computer Science/Algorithm
개요32350번 문제는 특별한 알고리즘을 요구하는 문제가 아닌, 구현 문제이다. 문제링크그러나 수많은 억까를 당하며 배운 내용을 정리해보겠다. 문제 풀이문제 이름 답게 '오버킬'이 발생하면 정상범위 인덱스 내에서 다음 인덱스의 값을 차감해야 한다.차감할 때는 '오버된 값의 p%'만큼 감소하는데여기서 나는 Int(floor(Double(abs(currentValue)) * (Double(p) * 0.01)))로 작성했다.그런데 이처럼 하면 87%에서 틀렸다고 뜬다.왤까 ?let NDp = readLine()!.split(separator: " ").map { Int($0)! }let N = NDp[0], D = NDp[1], p = NDp[2]var M = readLine()!.split(separator..
[메이드 인 스위프트] 자료구조 - 큐 Queue 구현해보기
·
🖥️ Computer Science/Data Structure
개요지난 Stack과 유사하게 기본적인 Queue를 구현하면서 자료구조 개념을 익혀보자이번에도 함수형 & 제네릭으로 작성해봤다. 코드 구현public struct KJQueue { private let queue: [Element] public var count: Int { queue.count } public var isEmpty: Bool { queue.isEmpty } public var peek: Element? { queue.first } // MARK: Initializer public init(_ queue: [Element] = []) { self.queue = queue } public func enqueue(_ value: Ele..
[메이드 인 스위프트] 자료구조 - 스택 Stack 구현해보기
·
🖥️ Computer Science/Data Structure
개요이번에 알고리즘 공부를 할 참이었는데,자료구조도 다시 공부하고 Swift로는 구현을 안 해본 거 같아서Swift로 구현해보고 이를 함수형을 지키며 불변성 & 순수 함수로 구현해보려 한다. 그냥 문뜩 Swift로 함수형 프로그래밍을 하고 싶어졌다.지난 번 Linked List를 함수형으로 만들었을 때 함수형으로 해볼 기회가 있었는데,거기서 매력을 느껴서 그런 것 같다. 코드 구현public struct KJStack { private let stack: [Element] public var count: Int { stack.count } public var isEmpty: Bool { stack.isEmpty } public var peek: Element? { stack.last..
[디자인패턴] 프로젝트에 Coordinator Pattern 적용 (3) - AppCoordinator 관리 & 순환참조 문제 해결
·
🖥️ Computer Science/👨🏻‍🎨 Design Pattern
AppCoordinator가 사라져서 Main 화면 Issue List가 사라지는 문제 해결기존 내 코드에는 다음과 같은 문제가 있었다.다른 곳에서는 weak var coordinator로 weak 키워드와 함께 관리가 되는데하필 메인 화면인 IssueList에서만 weak를 사용하면 앱이 더이상 동작하지 않는다.지난 번 팀원에게 내 SceneDelegate에서 AppCoordinator 관리가 잘못되었다고 짚어주셨다. 기존에 잘못된 내 코드class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? let navigationController = UINavigationController() func sce..
[디자인패턴] 프로젝트에 Coordinator Pattern 적용 (2) - 코디네이터 분리
·
🖥️ Computer Science/👨🏻‍🎨 Design Pattern
지난 번에 코디네이터 패턴을 적용해보며초반에 잘못 이해한 코디네이터아래 이미지는 잘못된(?) 이미지임, 개선 전 이미지 처음에 IssueCreator와 Assignee는 Issue List위에서 present 되는 방식이라,Issue List Coordinator 하나로만 작동하고, 내부 메소드로 상황에 맞는 ViewController를 띄워주면 된다고 생각했다.그러나 이건 OCP를 위배하는 코드라 판단, 아래와 같이 뷰컨트롤러와 코디네이터를 1:1 맵핑해주었다. 새로 적용해본 코디네이터Input에 대해 mermaid로 정리해봤다. 아래는 텍스트로 정리한 내용이다.처음에 앱이 실행되면 SceneDelegate에서 최상위 코디네이터인 AppCoordinator를 생성하고 해당 인스턴스의 .start() 메..
[디자인패턴] 프로젝트에 Coordinator Pattern 적용 (1) - 개념 & 도입 이유
·
🖥️ Computer Science/👨🏻‍🎨 Design Pattern
뷰컨트롤러의 역할 중 '화면 전환' 부분에 대한 관심 분리를 위해 코디네이터 디자인패턴을 적용해보려 한다.다른 블로그를 많이 보고, 내가 생각한 내용 위주로 현재 프로젝트에 도입하는 과정을 서술해보겠다.Coordinator Design PatternCoordinator 개념화면 전환만을 담당하는 것뷰 컨트롤러에서 present, dismiss, navi~.pushVC, navi~.popVC를 사용하여 화면 전환을 하곤 한다.그러나 이 또한, 뷰컨트롤러가 화면전환을 담당하고 있기 떄문에 SRP를 지키지 않음 Coordinator 적용 이유화면 전환만 담당하게끔 하여 뷰컨트롤러의 화면 전환 의존성을 제거함이로써 뷰컨트롤러는 View에 대한 처리만 할 수 있게 된다.현재 화면에 다른 뷰컨이 많이 쌓여 있을 때..
[ADR] 내 프로젝트에서 겪은 OCP 원칙에 대한 생각 정리
·
🖥️ Computer Science/🏛️ Software Architecture Patterns
ADRArchitecture decision record내 프로젝트에서 겪은 OCP 원칙에 대한 깊은 생각 정리학습 목표객체지향 SOLID 원칙 중 OCP에 대한 고민을 해본 경험을 적는다.현 프로젝트에 아키텍처를 OCP 원칙을 고려하여 생각해본다.학습 내용문제 상황먼저 위와 같은 모델이 있다.Shapable이라는 프로토콜을 도형 종류들이 채택하게끔 추상화 했다.그리고 Factory 패턴을 적용하여 Shapable 프로토콜을 채택한 도형을 만들어서 반환해주려고 한다.나는 여기서 Factory를 어떻게 만들어야 할 지 고민했다.하나의 ShapeFactory vs Shapable마다 Factory팩토리 패턴을 구현하기 위해 위 두가지 방법이 있을 것 같다.내가 생각한 두 가지 방법을 먼저 적어보겠다.하나의 ..
[CN] 4장: IP: the Internet Protocol (Datagram Format, Addressing)
·
🖥️ Computer Science/Network
IP: the Internet Protocol (Datagram Format, Addressing)Datagram Format네트워크 계층 기능 & IP Datagram Format네트워크 계층 기능네트워크 계층은 비 신뢰적임경로선택 알고리즘라우팅 프로토콜 (RIP, OSPF, BGP)SDN 컨트롤러IP 프로토콜Datagram FormatAddressingPacket Handling RulesICMP 프로토콜상태 진단/디버깅패킷 손실의 위치를 찾음IP Datagram FormatIP 헤더는 20byteIP 단편화/재결합링크 계층마다 MTU가 달라서네트워크 계층에서 IP 데이터그램을 단편화(분할)함목적지 호스트에서 재결합하여 데이터그램을 합침단편화식별자원본 데이터그램 구분플래그 - 3bit첫 번째 비트 -..
[CN] 4장: What’s inside a router (input, output, buffer 관리, 스케줄링)
·
🖥️ Computer Science/Network
What’s inside a router (input, output, buffer 관리, 스케줄링)라우터 구조 개요일반 라우터 구조 개요입력 포트라인종단 + 링크 계층 프로토콜 + 데이터그램 큐잉스위치입력포트/출력포트 연결스위칭 속도: 입력 → 출력 속도 조절N개 입력포트 = 속도는 N * R메모리/공유버스/상호연결네트워크 종류 3가지출력 포트데이터그램 큐잉 + 링크 계층 프로토콜 + 라인종단입력 포트라인종단 - 물리계층링크 계층 프로토콜 - 링크 계층 (데이터 링크 처리)‘검색’, 전달, 큐잉 - 데이터그램이 분산되어 있음헤더필드의 값으로 출력 포트를 조회함입력링크에 들어온 속도로 출력 해주는 것이 목표입력포트 큐잉: 데이터그램이 스위치 구조로 전달되는 속도보다 빨리 도착하는 경우목적지 기반 포워딩: ..