본문 바로가기

전체 글143

[Android/Kotlin] fold 사용법과 예제 Kotlin의 fold는 컬렉션을 순회하면서 초기값을 설정하고, 이전 연산의 결과를 누적하면서 값을 계산하는 데 사용됩니다. 특히, 누적된 값을 유지하면서 새로운 값을 추가해야 하는 경우 유용합니다.이번 글에서는 fold를 활용하여 ATM 대기 시간 최소화 문제를 해결하는 예제를 통해 fold의 동작 원리를 알아보겠습니다.fold의 기본 구조initial: 초기값 (연산을 시작할 때 사용할 값)operation: 리스트의 각 요소를 순회하며 누적값(acc)과 현재 요소(T)를 사용해 연산을 수행하는 람다 함수결과값(R)이 누적되면서 최종 결과를 반환기본 예제: 리스트의 합 구하기val numbers = listOf(1, 2, 3, 4, 5)val sum = numbers.fold(0) { acc, num.. 2025. 2. 5.
[Android/Compose] Spacer를 활용한 UI 요소 중앙 및 하단 배치 Compose를 이용해 화면을 구성하며, UI의 한 요소는 화면 중앙에 배치하고 다른 요소는 하단에 고정해야 하는 상황이 있었습니다.이 요구사항을 어떻게 해결할 지 고민하던 중, Spacer(modifier = Modifier.weight(1f))를 활용하여 원하는 대로 배치할 수 있었습니다.이 글에서는 해당 방법을 이용해 원하는 레이아웃을 구현한 과정을 정리해 보겠습니다.Spacer를 활용한 중앙 및 하단 배치구현 코드@Composablefun BusinessCardApp() { Column( modifier = Modifier.fillMaxSize(), // 전체 화면을 차지하도록 설정 horizontalAlignment = Alignment.CenterHorizonta.. 2025. 2. 4.
[Android/Kotlin] 코틀린의 mutableMapOf()는 왜 LinkedHashMap을 사용할까? 코틀린에서 mutableMapOf()를 사용하면 내부적으로 LinkedHashMap이 생성됩니다.처음에는 mutableMapOf()를 단순히 사용했지만, 왜 기본 구현체가 LinkedHashMap일까? 라는 의문이 들었습니다.이 글에서는 그 이유를 고민해보고, HashMap, LinkedHashMap, TreeMap의 차이를 비교한 내용을 정리해보겠습니다.1. mutableMapOf()는 LinkedHashMap을 사용한다우선, mutableMapOf()가 내부적으로 어떤 자료구조를 사용하는지 확인해보겠습니다. 즉, 코틀린의 mutableMapOf()는 기본적으로 LinkedHashMap을 사용한다는 것을 확인할 수 있었습니다.그렇다면 왜 LinkedHashMap을 기본으로 사용할까?2. LinkedHa.. 2025. 2. 4.
[Algorithm/Kotlin] 백준 11723번 집합: 집합 연산 최적화 MutableSet vs. 비트마스크(Bitmask) 이번 글에서는 MutableSet과 비트마스크(Bitmask) 두 가지 방식을 비교하며, 새롭게 알게 된 비트마스크를 활용한 집합 연산 최적화 방법을 정리해보겠습니다.1. 문제 설명비어있는 공집합 S가 주어졌을 때, 다음 연산을 수행하는 프로그램을 작성하세요.add x : S에 x를 추가 (1 ≤ x ≤ 20)remove x : S에서 x를 제거check x : S에 x가 있으면 1, 없으면 0 출력toggle x : S에 x가 있으면 제거, 없으면 추가all : S를 {1, 2, ..., 20}으로 변경empty : S를 공집합 {}으로 변경입력M (1 ≤ M ≤ 3,000,000): 연산 개수이후 M개의 연산이 주어짐출력check 연산이 수행될 때마다 결과를 출력2. 문제 해결 아이디어이 문제를 해결.. 2025. 2. 3.
코루틴과 스레드, 그리고 프로세스: 그 유사성과 차이 운영체제를 공부하다 보면 자연스럽게 프로세스(Process)와 스레드(Thread)의 개념을 배우게 됩니다.최근 코루틴(Coroutine)을 공부하면서, 스레드와 비슷한 점이 많아 보이면서도 작동 방식에는 차이가 있다는 점이 흥미로웠습니다.특히, 운영체제에서 배운 프로세스와 스레드의 개념이 코루틴을 이해하는 데 큰 도움이 될 수 있다는 생각이 들어, 나중에 참고할 수 있도록이 세 가지를 비교하며 정리해 보았습니다.프로세스와 스레드 간단 정리프로세스(Process)란?실행 중인 프로그램을 뜻하며, 운영체제가 관리하는 독립적인 실행 단위입니다.각 프로세스는 자체 메모리(Code, Data, Heap, Stack)를 가지고 있으며, 다른 프로세스와 자원을 공유하지 않습니다.스레드(Thread)란?하나의 프로세.. 2025. 1. 24.
프로세스와 스레드 운영체제를 공부하면서 프로세스(Process)와 스레드(Thread)는 개념을 자주 접하게 되었습니다.이 둘은 프로그램이 어떻게 실행되고 동작하는지 설명하는 기본적인 단위인데요, 헷갈리기 쉬운 이 개념을 간단히 정리해보겠습니다.프로세스란 무엇인가?프로세스는 실행 중인 프로그램을 의미합니다.프로그램은 단순히 저장된 코드일 뿐이고, 프로세스는 메모리에서 실행되는 프로그램의 실체입니다.프로세스는 독립적인 실행 단위로, 운영체제는 프로세스마다 고유한 메모리 공간과 자원을 할당합니다.프로세스의 특징:독립적인 메모리 공간:   프로세스마다 Code, Data, Heap, Stack 영역이 독립적으로 존재합니다.   한 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다.운영체제의 스케줄링 대상:   CPU.. 2025. 1. 24.
프로세스 상태 전이 다이어그램(Process State Transition Diagram) 운영체제에서 프로세스(Process)는 실행 중인 프로그램을 의미합니다. 하지만 하나의 프로그램이 항상 실행 상태에 있는 것은 아닙니다. 프로세스는 실행을 준비하거나, 대기하거나, 종료되는 등 다양한 상태를 거칩니다. 이러한 상태를 시각적으로 나타낸 것이 Process State Transition Diagram입니다. 이번 글에서는 프로세스의 상태와 전이 과정을 쉽게 이해할 수 있도록 정리해 보겠습니다.프로세스의 주요 상태Created (생성 상태)   프로세스가 막 생성된 초기 상태입니다.   아직 CPU를 할당받지 않았으며 실행 준비 중입니다.   다음 상태: Ready 상태로 전환.Ready (준비 상태)   프로세스가 실행 준비를 마친 상태로, CPU를 할당받기 위해 대기합니다.   CPU 스케.. 2025. 1. 24.
운영체제란 무엇인가? 운영체제(Operating System, OS)는 컴퓨터 시스템의 핵심 소프트웨어로, 하드웨어와 소프트웨어를 관리하며 사용자와 컴퓨터 간의 인터페이스 역할을 합니다. 운영체제는 컴퓨터의 다양한 리소스를 효율적으로 관리하고, 응용 프로그램이 하드웨어를 사용할 수 있도록 지원합니다.이번 글에서는 운영체제가 무엇인지와 운영체제가 관리하는 주요 리소스에 대해 정리해보겠습니다.운영체제의 정의운영체제는 다음과 같은 역할을 수행합니다:하드웨어 리소스 관리: CPU, 메모리, 디스크 등 하드웨어 자원을 효율적으로 관리.소프트웨어 리소스 관리: 파일 시스템, 프로세스, 네트워크 등 소프트웨어 자원의 동작을 조율.사용자와 컴퓨터 간의 인터페이스 제공: 사용자 명령을 하드웨어가 이해할 수 있는 형태로 변환.운영체제는 컴퓨터.. 2025. 1. 24.
자료형 한눈에 보기: 비트, 바이트와 정수, 실수, 문자, 논리형 컴퓨터는 데이터를 저장하고 처리하기 위해 자료형(Data Type)을 사용합니다.특히, 정수(Integer)와 실수(Floating Point)는 저장 방식과 연산에서 큰 차이가 있습니다.정수는 이진법으로 정확히 저장할 수 있지만, 실수는 근사값으로 저장합니다.이는 컴퓨터가 실수를 저장할 때 부동소수점(Floating Point) 방식을 사용하기 때문이며, 이로 인해 저장 오차가 발생합니다.또한, 문자(Char)는 직접적으로 문자를 저장하지 않고, 문자에 해당하는 정수값(유니코드)를 저장합니다.이번 글에서는 비트와 바이트의 기본 개념, 정수형과 실수형, 문자형 자료형의 특징, 그리고 Float과 Double의 차이를 중심으로 정리하겠습니다.1. 비트(Bit)와 바이트(Byte)의 기본 개념비트(Bit)란.. 2025. 1. 23.
[Android/Kotlin] 코틀린 컬렉션 함수: any와 all 코틀린의 컬렉션 함수 중 any와 all은 컬렉션 내부의 요소를 조건에 따라 검사할 때 사용하는 매우 유용한 함수입니다.이 두 함수는 조건을 간단하고 가독성 좋게 표현할 수 있어 자주 활용됩니다.\1. any 함수정의컬렉션의 요소 중 하나라도 조건을 만족하면 true를 반환.조건을 만족하는 요소를 찾으면 즉시 검사를 종료합니다.구문collection.any { 조건식 }반환값Boolean: 조건을 만족하는 요소가 하나라도 있으면 true, 그렇지 않으면 false.예제 1: 숫자 리스트에서 짝수가 하나라도 있는지 확인val numbers = listOf(1, 3, 5, 6, 7)val hasEven = numbers.any { it % 2 == 0 }println(hasEven) // 출력: true 리.. 2025. 1. 21.
[Algorithm/Kotlin] 에라토스테네스의 체(Sieve of Eratosthenes) 쉽게 이해하기 에라토스테네스의 체는 특정 범위에서 소수를 빠르고 효율적으로 구하는 방법입니다.작은 소수의 배수를 제거함으로써 소수만 남기는 아이디어를 기반으로 합니다.이 글에서는 코드와 함께 이해한 내용을 정리 해 두도록 하겠습니다.에라토스테네스의 체의 핵심 동작1. i의 범위 제한: i in 2..Math.sqrt(limit.toDouble()).toInt()이 범위는 왜 필요한가?소수의 배수 제거는 대칭적으로 이루어집니다.예: 16의 약수는 (2,8),(4,4)처럼 대칭적으로 나타납니다.따라서 sqrt(limit)​까지만 확인하면 충분합니다.sqrt(16) = 4이므로 i=2,3,4까지만 반복하면 됩니다.코드 예제val limit = 16for (i in 2..Math.sqrt(limit.toDouble()).to.. 2025. 1. 20.
[Android/Kotlin] removeAt: 요소 제거와 반환 동작 이해 코틀린의 MutableList는 동적으로 크기가 조정되는 리스트로, 다양한 메서드를 제공하여 데이터를 관리할 수 있습니다.그중에서도 removeAt 메서드는 특정 인덱스의 요소를 제거하면서 해당 요소를 반환하는 기능을 제공합니다.이번 글에서는 removeAt의 동작 원리와 사용 예제를 살펴보겠습니다.1. removeAt 메서드란?removeAt(index)는 리스트의 특정 인덱스에 있는 요소를 제거하고, 그 제거된 요소를 반환합니다. 이 메서드는 다음 두 가지 작업을 수행합니다:리스트에서 요소 제거:지정된 인덱스의 요소를 삭제합니다.삭제 후, 리스트의 크기가 1 감소합니다.제거된 요소 반환:삭제된 요소 자체를 반환하여, 호출한 코드에서 해당 값을 사용할 수 있습니다.2. removeAt의 동작 과정동작 .. 2025. 1. 17.
반응형