알고리즘의 성능을 이야기할 때에는 시간 복잡도와 공간 복잡도에 대해 이야기한다.시간 복잡도는 문제를 해결하는 데 걸리는 시간이고 공간 복잡도는 메모리 공간을 얼마나 사용하는지 나타낸다.입력 크기에 따라서 어떻게 되는지는 빅오 표기법을 통해 표시한다.특정 데이터를 찾을 때에는 왼쪽에서 시작하여 오른쪽으로 끝이 나는 방법 같이 선형적으로 찾게 된다. 운에 귀결되는 탐색이다.이러한 방식으로 모든 값을 확인하는 것은 O(n) 시간 복잡도를 뜻한다.하지만 알고리즘으로 정렬이 되어있다면 특정 데이터를 빠르게 찾을 수 있게 된다.자주 사용되는 정렬 알고리즘의 동작 원리와 시간 복잡도Sorting AlgorithmsTime ComplexitySpace Complexity Best CaseAverage CaseWors..
iOS 다바이스의 메모리 제약과 앱 메모리 제한디바이스마다의 실제 메모리 RAM이 존재하고 앱이 실행되면 메모리를 사용하며 실행된다.사용하려는 시스템은 메모리를 사용하다 부족하면 백그라운드에서 실행 중인 앱을 종료하거나 앱의 메모리 사용을 제한할 거 같다.메모리 제한이라면 각 앱마다 메모리 양을 제한하여 다른 앱와 프로세스에 문제 생기는 부분을 이야기하는 거 같다. 메모리 워드(word) 크기와 데이터 정렬이 메모리 액세스 성능에 미치는 영향메모리에서 말하는 word는 데이터를 저장하고 처리하는 기본 단위를 의미한다.word의 크기는 컴퓨터 아키텍처에 따라 다르며 32비트 CPU에서 1word는 32비트를 의미한다.아이폰 14 프로에 사용되는 Apple A16은 64비트 6코어 CPU로 데이터를 저장하고..
네트워크 프로토콜은 네트워크 통신을 위한 약속이다. 데이터의 형식, 순서, 시스템과의 조율 등 다양한 역할을 수행한다. 프로토콜 스택은 TCP/IP 4계층과 OSI 7계층 모델이 있으며, 각기 다른 역할로 사용된다. TCP/IP 모델은 실제 네트워크 작동 방식으로 사용되며 OSI는 교육 혹은 개념적인 모델로 사용된다. OSI 7계층 Application: 사용자와 연결, 응용 SW를 도와주는 계층으로 하위 계층에 사용자 정보를 전달하거나 반대로 하위 계층에서 전송한 데이터를 사용자에게 전달한다. Presentation: 송신측과 수신측 사이에 데이터 형식을 정한다. Session: Port 번호를 연결 Transport: 실제 데이터를 전송하기 위한 동작을 담당, 사용되는 프로토콜에는 TCP와 UDP가 ..
iOS 앱의 메모리 구조와 각 영역의 특징 메모리 공간은 4가지 영역으로 구성되어 있다. 코드 영역 데이터 영역 힙 영역 스택 영역 코드 영역 텍스트 영역이라고도 하며, 프로그램을 구성하는 실행 가능한 기계어 코드로 저장 컴파일 과정에서 생성되며, 대부분의 운영체제에서는 읽기 전용으로 되어 있어 코드 불변성 코드 실행을 위해 필수적인 것을 보호되는 것으로 커널, 프로그램, 라이브러리 코드 등 텍스트로 저장 데이터 영역 전역 변수와 정적 변수를 저장하는 영역 앱 실행 시 할당되고 앱 종료 시 해제되며, 읽기 쓰기가 가능 정의된 초기값으로 설정되어 앱 모든 코드에서 접근이 가능 힙 영역 동적으로 할당된 메모리를 저장하는 영역 런타임 시에 필요한 메모리를 확보하는데 사용 메모리 크기 제한 없음 느린 속도 모든..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 앞뒤를 뒤집어도 똑같은 문자열을 Palindrome 주어진 문자열 s의 부분문자열 중 가장 긴 팰린드롬의 길이를 반환 제한사항 문자열 s의 길이는 2,500 이하의 자연수 풀이 DP로 풀어볼 수도 있다. 시간 복잡도를 줄여줄 수 있는 Manachar Algorithm으로 풀어보려고 한다. Manacher Algorithm 각 문자를 중심으로 좌, 우 문자를 비교한다. dbcbabcbabc 라는 문자열을 예시로 들면 그림과 같이 팰린드롬을 만드는 부분문자열이 존재한다. 순차적으로 탐색을 진행한다. 팰린드롬..
운영체제는 Operating SystemOS으로 불리며, 실행할 프로그램을 메모리에 적재(겹치지 않도록 적당한 공간 할당)하고. 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리하는 시스템 소프트웨어이다. 운영체제는 응용 프로그램이 최대한 공정하게 CPU 자원을 사용하도록 할당한다. 이 외에도 시스템 자원을 관리합니다. 프로그램이 올바르고 안전하게 실행되게 하는 기능이 운영체제의 핵심 서비스에 속한다. 이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel) 이라고 한다. 멀티태스킹을 지원하는 경우, 운영체제는 모든 프로세스들을 스케줄링하여 동시에 수행되는 것처럼 보이는 효과를 낸다. iOS는 iPhone 및 iPad 장치용으로 설계한 운영체제로 Darwin..
Intel은 16비트 8086 마이크로프로세서를 출시하면서 86을 사용한 여러 후속 제품이 출시되었다. x86은 일반적으로 32비트 아키텍처를 나타낸다. x86 CPU에는 많은 명령어 집합이 존재한다. 단일 명령으로 전체 계산(ex: 곱하기)을 완료하거나 데이터 청크를 메모리의 한 위치에서 다른 위치로 직접 이동할 수 있는 것들이다. 별 것 아닌 것처럼 느껴져도 곱하고 이동하려면 낮은 수준에서 많은 명령이 필요하다. 이러한 유형의 명령 집합이 있는 처리장치는 CISCComplex Instruction Set Computing라고 한다. 강력한 명령어는 공간과 전력을 차지하는 더 많은 트랜지스터가 필요하다는 것을 의미한다. 에너지 효율성과 CPU 아키텍처의 명령어 세트를 단순화하는 방법을 모색하다가 RIS..
실제 메모리와 CPU 사이에서 빠르게 전달을 위해 미리 데이터들을 저장해주는 좀 더 빠른 메모리이다. 일반적으로 CPU 칩에 직접 통합되거나 별도의 BUS 상호 연결이 있는 별도의 칩에 배치되기 때문에 CPU 메모리라고도 한다. 따라서 프로세서에 대한 접근성이 더 좋고, 프로세서와 물리적으로 가깝기 때문에 효율성을 높일 수 있다. 프로세서에 가깝기 위해서 메인 메모리보다 훨씬 작다. 결과적으로 저장 공간이 적다. 대신 캐시 메모리는 RAM보다 10~100배 빠르게 작동한다. 종류 일반적인 세 가지 캐시 수준이 있다. L1 L2 L3 L1: Lightning-Fast Access 매우 빠르지만 상대적으로 작으며 일반적으로 프로세서 칩에 CPU 캐시로 내장된다. 자주 사용되는 명령어와 데이터를 저장하여 CP..