분류 전체보기 403

[백준/C++] 1904번 : 01타일 (DP 연습)

01타일 문제 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다. 그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다. 예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다. (01, 10은 만들 수 없게 되었다.) 또한 N=4일 때는 0011, 0000, 1001, 1100, 1111 등 총 ..

[Unreal] FName, FText, FString

스트링 처리 언리얼 엔진에서 String을 처리하는 클래스는 FName, FText, FString이 있습니다. FName FName은 문자열을 고유한 식별자로 사용할 때 주로 사용됩니다. FName에 주어진 문자열이 재사용된다고 하더라도, 데이터 테이블에 한 번만 저장됩니다. 또한 FName 객체의 직접적인 할당 없이도, 매개변수로 FName( ) 객체를 전달함과 동시에 FName 테이블에 로드되어 전달됩니다. 이러한 특성으로 인해 FName은 초경량 시스템이라고 볼 수 있습니다. 내부적으로 문자열을 해시 테이블에 저장하기 때문에 FName은 빠른 비교 연산을 가능하게 합니다. 따라서 빈번한 비교 연산이 필요하거나, 문자열이 고유한 식별자로 사용되는 경우에 효율적입니다. 또한, FName은 대소문자를 ..

[C++] 템플릿 (Template)

정의 템플릿은 C++ 프로그래밍 언어의 한 기능으로, 함수나 클래스를 일반화하여 여러 타입에 대해 동작하는 코드를 작성할 수 있는 도구입니다. 템플릿을 사용하면, 함수나 클래스가 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 합니다. 템플릿의 종류로는 함수를 다양한 타입에 대해 동작하도록 일반화하는 '함수 템플릿'과, 클래스를 일반화하는 '클래스 템플릿'이 있으며, 연산자 오버로딩에서 자주 사용됩니다. 동작 원리 템플릿 코드를 작성하고 나서, 템플릿 함수나 클래스를 사용하면 컴파일러는 제공된 타입에 맞는 코드를 생성합니다. 이를 '템플릿 인스턴스'라고 합니다. 더 자세한 템플릿의 동작원리를 이해하려면 프로그램의 빌드 과정을 이해해야 합니다. 프로그램이 빌드되면 컴파일부터 링..

[C++] STL - std::map과 std::unordered_map

std::map map은 key-value 쌍을 저장하는 자료구조로, 이진 탐색 트리(BST)인 레드-블랙 트리를 기반으로 구현되었습니다. 레드-블랙 트리를 기반으로 구현되어 map의 key 값은 자동 정렬됩니다. 시간복잡도 map 자료구조에 원소를 추가/검색/삭제할 때, 해당 위치를 찾기 위해 이진 탐색을 수행합니다. 그 후 명령에 따라 새로운 노드를 삽입하거나, 주어진 키와 각 노드의 키 값을 비교하며 검색하거나, 노드를 제거하는 등의 역할을 수행합니다. 따라서, 이러한 이진 탐색으로 작동하는 map은 모든 기본 연산이 O(log n)의 시간 복잡도를 갖습니다. map은 왜 정렬을 할까? 1. key-value 쌍을 저장할 때, key 값들이 일정한 순서로 정렬되어야 이진 탐색이 가능하고, 이진 탐색..

[C++] 다중 상속의 문제점 : 다이아몬드 문제 (Diamond Problem)

다중 상속 정의 다중 상속이란, 하나의 클래스가 두 개 이상의 클래스로부터 멤버를 상속받아 파생 클래스를 생성하는 것을 의미합니다. 다중 상속의 문제점 1. 상속받은 여러 기초 클래스에 같은 이름의 멤버가 존재하는 경우 2. 하나의 클래스를 간접적으로 두 번 이상 상속받을 경우 3. 가상 클래스가 아닌 기초 클래스를 다중 상속하여, 기초 클래스 타입의 포인터로 파생 클래스를 가리킬 수 없는 경우 다중 상속을 사용하는 경우 위와 같은 상황이 벌어질 수 있고, 이런 경우 "모호한(ambiguous) 호출"같은 오류가 발생할 수 있습니다. 다이아몬드 상속 구조 다중 상속을 다이아몬드 구조로 사용한 경우 '다중 상속의 모호성 문제'가 발생하게 됩니다. 위 그림과 같이 A, B, C, D 클래스의 구조가 있을 때..

[OS] 프로세스와 멀티 프로세스, 스레드와 멀티 스레스

프로세스 프로세스란 실행파일이 메모리에 적재되어 CPU를 할당받아 실행되는 것을 말합니다. 멀티 프로세스 멀티 프로세스는 프로세스가 2개 이상 동시에 실행되는 것을 말합니다. 이때, 동시에 라는 말은 동시성과 병렬성 두 가지를 의미합니다. 동시성(병행성)은, CPU 코어가 1개일 때 즉, 단일 프로세서일 때, 여러 프로세스를 짧은 시간동안 번갈아가며 연산하는 시분할 시스템으로 실행되는 것이다. 병렬성은 CPU 코어가 여러 개일 때 즉, 멀티 프로세서일 때, 각각의 코어가 각각의 프로세스를 연산함으로써 실제 프로세스가 동시에 실행되는 것을 말합니다. > 프로세스와 프로세서 프로세스(process)는 프로그램의 실행 상태를 말하고, 프로세서(processer)는 CPU 코어를 일컫는 말이다. 즉, 멀티 프로..

[C++] STL - std::list와 std::vector

std::list 정의 C++ STL의 list는 이중 연결 리스트(double linked list)를 기반으로 구현된 컨테이너입니다. 이중 연결 리스트는각 노드가 앞선 노드(prev)와 다음 노드(next)에 대한 참조 또는 포인터를 가지고 있는 데이터구조입니다. 특징 list는 어느 위치에서든 O(1)의 시간복잡도로 요소를 삽입하거나 삭제할수 있습니다. 그러나 이러한 장점을 가지기 위해, list는 추가적인 메모리(앞 뒤 원소의 연결 정보)를 사용하고, 배열처럼 연속된 메모리 공간을 사용하지 않기 때문에 '캐시 지역성'이 떨어져 속도가 상대적으로 느립니다. > 캐시 지역성 (Cache Locality) 더보기 캐시 지역성(cache locality)은 프로그램의 메모리 접근 패턴이 얼마나 효율적으로..

[C++] STL - C++ 표준 템플릿 라이브러리

정의 C++ STL은 Standard Template Library의 약자로, C++ 표준 라이브러리의 일부입니다. STL은 다양한 유형의 알고리즘과 데이터 구조를 제공하며, 이들은 모두 템플릿으로 제공되어 다양한 데이터 타입에 대해 동작할 수 있습니다. 종류 STL은 크게 컨테이너, 알고리즘, 반복자, 함수 객체(함수자)의 네 가지 구성 요소로 나눌 수 있습니다. 컨테이너 (Container) 컨테이너는 자료를 저장하는 클래스 템플릿들의 집합이며 연속 컨테이너, 정렬 연관 컨테이너, 비정렬 연관 컨테이너, 컨테이너 어댑터로 나눌 수 있습니다. 연속 컨테이너 (= 시퀀스 컨테이너, Sequence Containers) 연속 컨테이너는 데이터를 순차적으로 저장합니다. 이들은 배열과 비슷한 형태를 가지며, ..

[Unreal] 리플리케이션 (Replication) : Actor

정의 리플리케이션은 서버와 클라이언트 사이에서 데이터와 명령을 주고받는 프로세스를 말합니다. 추가적인 설명 리플리케이션의 주역은 액터(Actor)입니다. 서버는 액터 목록을 유지하고, 클라이언트에서 리플리케이트되도록 마킹된 액터들에 대한 근접 추정치를 유지할 수 있도록 클라이언트를 주기적으로 업데이트합니다. 이때 사용되는 액터 업데이트 방식은 '프로퍼티 업데이트'와, 'RPC' 로 나눠집니다. 프로퍼티 업데이트 : 리플리케이션용 프로퍼티 구성하기 1. 액터의 UPROPERTY() 매크로에 Replicated 지정자 포함하기 2. AActor 클래스의 GetLifetimeReplicatedProps 함수 구현하기 > DOREPLIFETIME(AActor, Owner) DOREPLIFETIME은 Unreal..

[프로그래머스/C++] 기둥과 보 설치 (구현 연습)

기둥과 보 설치문제 설명 빙하가 깨지면서 스노우타운에 떠내려 온 "죠르디"는 인생 2막을 위해 주택 건축사업에 뛰어들기로 결심하였습니다. "죠르디"는 기둥과 보를 이용하여 벽면 구조물을 자동으로 세우는 로봇을 개발할 계획인데, 그에 앞서 로봇의 동작을 시뮬레이션 할 수 있는 프로그램을 만들고 있습니다. 프로그램은 2차원 가상 벽면에 기둥과 보를 이용한 구조물을 설치할 수 있는데, 기둥과 보는 길이가 1인 선분으로 표현되며 다음과 같은 규칙을 가지고 있습니다. 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다. 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다. 단, 바닥은 벽면의 맨 아래 지면을 말합니다. ..

728x90