전체 글 29

알고리즘 - 이진 탐색(Binary Search)

이진 탐색(Binary Search)이진(Binary) : "둘로 나누는", "두가지 상태로 구분하는"컴퓨터에서 바이너리는 0과 1처럼 두개의 값으로 상태를 나누는 것을 의미함즉, 문제 풀이를 위해 탐색 공간을 둘로 나눠 탐색하며 범위를 줄여나가는 것을 의미함 이진 탐색 첫 문제(Leetcode 39. Search Insert Position)를 풀기 위해 키워드를 뜯어보고,이때 들었던 생각은 "둘로 나눌 기준(divider)이 필요하겠구나!"그렇게 이진 탐색 첫 문제를 무모하게 풀기 시작했습니다 이런 경우, 저런 경우 따져가며 코드를 짜다보니 if의 if... elif... 가 생겨나고 결국 TLE가 발생해버렸습니다..🤯결국 약간의 힌트를 얻고, 깨달았습니다 "범위를 줄여나가는 것보다 나누는 기준선..

알고리즘 2025.10.04

자다 깨서도 말할 수 있는 SOLID 원칙

SOLID 원칙: 객체 지향 설계의 5대 핵심 원칙S - 단일 책임 원칙(Single Resposibility Principle, SRP)정의: 클래스는 하나의 책임만 가져야 한다.클래스 뿐만 아니라 더 큰 레벨 혹은 더 작은 레벨 모두 적용된다. 모듈, 패키지, 함수, 메서드 등등하나의 책임만을 가지는 것은 변경의 이유가 하나라는 의미!책임이 여러개라면 변경의 이유도 여러가지일 수 있기 때문에작게 쪼개라는 것과 한가지 책임만을 갖도록 나누는 것은 다름O - 개방-폐쇄 원칙(Open-Closed Priciple, OCP)정의: 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다.새로운 요구사항이 생겼을 때 기존 코드를 수정하지 않고 새로운 코드를 추가할 수 있어야 한다는 의미즉, 새로운 기능이 추가될..

카테고리 없음 2025.10.03

Operating System Concepts - Processes 실습

이것은 시리즈물입니다🧶2025.09.21 - [CS] - Operating System Concepts - Introduction2025.09.22 - [CS] - Operating System Concepts - O/S structures2025.09.23 - [CS] - Operating System Concepts - Processes#include #include int main(){ pid_t pid; pid = fork(); printf("Hello, Process!\n");}// Hello, Process!// Hello, Process!fork() 시스템 콜을 통해 child process가 생성됐지만, parent process와 child process 중 어떤 프로세..

CS 2025.09.24

Operating System Concepts - Processes

이것은 시리즈물입니다🧶2025.09.21 - [CS] - Operating System Concepts - Introduction2025.09.22 - [CS] - Operating System Concepts - O/S structures 프로세스실행 중인 프로그램, 메모리에 올라온 프로그램OS에서 실행하는 작업의 단위프로세스를 실행하기 위해 필요한 리소스 : CPU Time, Memory, Files, I/O 장치프로세스 메모리 구조Text Section : 실행 가능한 코드 (= executable code)Data Section : 전역 변수Heap Section : 실행 중 동적으로 할당되는 메모리 영역 (malloc, new 등의 동적 메모리 할당 코드)Stack Section : 함수 호출..

CS 2025.09.23

Operating System Concepts - O/S structures

이것은 시리즈물입니다🧶2025.09.21 - [CS] - Operating System Concepts - IntroductionOS가 제공하는 서비스UI(User Interface)프로그램 실행입출력 연산파일 시스템 조작에러 탐색자원 할당로깅보호 및 보안OS가 제공하는 인터페이스CLI(Command Line Interface) : 명령어 기반 인터페이스예: sh(쉘), bash, csh, zshGUI(Graphical User Interface) : 그래픽 기반 유저 인터페이스예: 아이콘, 버튼, 윈도우Touch-Screen Interface : 터치 기반 인터페이스예: 스마트폰, 태블릿, ATM, 키오스크더보기🐚 쉘(Shell)? 사용자가 입력한 명령을 해석해서 OS에 전달하고 실행 결과를 다시 ..

CS 2025.09.22

Operating System Concepts - Introduction

[지금 무료]운영체제 공룡책 강의| 주니온 - 인프런 강의현재 평점 4.9점 수강생 17,292명인 강의를 만나보세요. 운영체제의 기본 원리를 튼튼히 이해해야만 고급 프로그래밍 기술을 이해할 수 있습니다. 본 강의는 운영체제의 바이블이라 할 수 있는 공www.inflearn.com 그 유명한 공룡책을 정독하기에는 너무나 양이 많아, 강의로 학습하고 내용을 기록용으로 정리해봤습니다!개인적으로 궁금한 부분을 추가 조사했기 때문에 혹여나 잘못된 정보가 기재되어 있다면 정정 요청 부탁드립니다🙇‍♀️운영체제하드웨어와 소프트웨어 사이에 위치하며, 사용자, 응용 프로그램, 하드웨어 사이에서 중재자 역할을 함사용자가 입력 장치를 통해 이벤트를 발생시킴 -> 응용 프로그램에서 이벤트 처리를 위해 OS에게 요청 -> O..

CS 2025.09.21

이제서야 알게된 재미있는 dataTask

URLSession에 대해 톺아보던 중, 재미있는 것을 알게 되어 기록하고자 합니다🙌🏻 보통 기본적인 네트워크 통신을 위해서는 아래와 같이 구현을 하지 않을까 싶습니다.// 1. completion handlerlet task = URLSession.shared.dataTask(with: url) { data, response, error in if let error { // error 처리 return } guard let data else { return } // data, response 처리}task.resume()// 2. swift concurrencylet (data, response) = try await URLSession.shared.dat..

Swift 2025.09.01

Mise로 Tuist 버전 관리하기

Tuist를 4.55.6로 업데이트 한 김에 앞으로는 프로젝트마다 Tuist 버전별 환경으로 실행할 수 있도록 하려고 합니다.버전 관리 도구로 Mise를 설치하려고 하는데, 전에 회사 프로젝트를 Tuist로 재구성 할 때에는 제대로 공부하지 못하고 바로 Mise 설치하고 Tuist를 실행했어서 이번에는 꼼꼼히 흐름을 추적하면서 기록하려고 합니다. Tuist 버전 관리 도구에는 Mise, Homebrew 등등이 있는데, Tuist 공식 문서에서는 Homebrew의 대체 도구로 Mise를 추천하고 있는데 두 도구를 한번 비교해봅시다.⚖️ Homebrew? Mise?Homebrew는 한가지 버전의 바이너리에만 접근할 수 있는 반면, Mise는 버전별로 설치하고 접근할 수 있어 프로젝트마다 다른 Tuist 버전..

Tuist 2025.08.13

Tuist 업데이트 할 때 경험한 트러블슈팅(aka 집요한 실험노트)

Tuist 버전 업데이트를 하는 과정에서 경험한 트러블슈팅을 기록하고자 작성하려고 합니다.문제 해결 과정을 기록하지 않으면 시간이 흐르고 같은 문제를 마주했을 때 그때마다 서치해서 해결만 하게 되더라구요! 우선 Tuist 버전을 확인하고 업데이트를 시도합니다.$ tuist version$ tuist update tuist update를 실행하면 CLI 실행파일 자체를 업데이트하는 동시에, TuistEnv zip 파일을 다운받아 unzip 하는 과정을 거칩니다.TuistEnv의 역할은 무엇일까요?TuistEnv는 런타임 환경 관리자로, 터미널 명령을 실제로 처리할 Tuist 실행 파일을 다운로드하고, 설치하고, 관리하는 역할을 합니다.Tuist 4부터는 TuistEnv가 Mise로 대체되어 공식 설치 스크..

Tuist 2025.08.01

백준 20551번 문제 풀이

💡 최적화 전략 정렬arr.sort() → O(N \log N)값 → 첫 등장 인덱스 매핑Dictionary에 최초 등장 인덱스만 저장 → O(N)질의 처리print(indexMap[query] ?? -1) → 평균 O(1)전체 시간 복잡도:O(N\log N) + O(N) + O(M) = O(N\log N + M)// 1) 첫 번째 줄 입력 및 파싱let firstLine = readLine()!let parts = firstLine.split(separator: " ").map { Int($0)! }let n = parts[0], m = parts[1]// 2) 배열 입력 및 정렬var arr = [Int]()arr.reserveCapacity(n)for _ in 0..📚 키워드 정의 Diction..

카테고리 없음 2025.04.25
반응형