분류 전체보기 403

[C++] RTTI (RunTime Type Information, 실시간 타입 정보)란?

정의 RTTI란 실시간 타입 정보의 약자로, 프로그램 실행 중에 데이터 타입에 대한 정보가 필요할 때 사용하는 기능입니다. 즉, 런타임에 개체의 형식이 결정될 수 있도록 하는 메커니즘이라고 볼 수 있습니다. RTTI를 사용하면 런타임에 객체의 타입을 식별하거나, 클래스 계층에서 특정 클래스가 다른 클래스의 하위 클래스인지 확인하는 등의 작업을 수행합니다. RTTI는 클래스 타입 관련 정보가 vtable(가상함수 테이블)에 같이 저장되기 때문에, 가상 함수가 있는 클래스에 대해서만 작동합니다. 다르게 말하면 가상함수가 없는 클래스는 실행 중에 타입 정보를 알아야 할 필요가 없다고 볼 수 있습니다. 또한, 컴파일러는 컴파일 번역 작업이 끝나면 타입 이름을 실행파일에 남길 필요가 없어 RTTI로 정보를 가져옵..

[자료구조] 자료구조와 알고리즘을 왜 사용하고 공부하는가?

자료구조를 사용하는 이유? 자료구조를 특정 상황에 맞게 유용하게 사용한다면, 메모리를 효율적으로 사용하면서, 데이터를 빠르고 안정적으로 처리할 수 있다. 알고리즘을 사용하는 이유? 알고리즘은 특정 문제를 메모리 효율적이고 빠른 성능으로 해결하는 것을 궁극적인 목표로 한다. 따라서 정해진 일련의 절차나 방법을 공식화한 수학적 형태로 표현함으로써 문제 해결에 도움을 줄 수 있다. 자료구조와 알고리즘을 공부하는 이유? 1. 기초 코딩 능력이 좋아진다. 실무에서는 기초 코딩 능력, 전문 분야 지식, CS 지식을 밸런스있게 잡힌 인재를 추구한다. 여기서 기초 코딩 능력은 자료구조와 알고리즘을 공부하며 기를 수 있다. 자료구조와 알고리즘을 공부하며 계속해서 발생하는 문제점을 해결하기 위해 새로운 기술을 빠르게 습득..

[프로그래머스/C++] 호텔 대실

호텔 대실 문제 설명 호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다. 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요. 제한사항 1 ≤ book_time의 길이 ≤ 1,000 book_time[i]는 ["HH:MM", "HH:MM"]의 형태로 이루어진 배열입니다 [대실 시작 시각, 대실 종료 시각] 형태입니다. 시각은 HH:MM 형태로 24시간 표기법을 따르며, "00:00" 부터 "23:59" 까지로 주어집니다. 예약 시각이 자정을 넘어가는 경..

[C++] Cast 4종류 (static, dynamic, const, reinterpret)

static_cast : 정적 캐스팅 static_cast는 컴파일 타임에 형변환이 가능한지를 검사하고 캐스팅하는 방식입니다. 컴파일 타임에만 타입검사를 수행하고, 실행 시간(런타임)에는 타입 검사를 수행하지 않습니다. 예를 들어, 정수를 실수로 변환하거나, 기본 클래스 포인터를 파생 클래스 포인터로 변환하는 등의 작업을 수행할 수 있습니다. static_cast는 컴파일러가 타입 안전성을 검사하므로, 불가능한 캐스팅을 시도하는 경우에 컴파일 오류를 발생시킵니다. > 추가 설명 더보기 - 포인터의 타입이 서로 관련 없을때는 static_cast를 적용할 수 없다. - 변환 생성자가 제공되지 않는 타입의 객체에는 static_cast를 적용할 수 없다. - 기본적으로 C++의 타입 규칙에서 허용하지 않는 ..

[프로그래머스/C++] 귤 고르기 (STL - map)

귤 고르기 문제 설명 경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다. 예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다. 경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를..

[Unreal] 언리얼 서버 모델

언리얼에서 사용되는 서버-클라이언트 모델은 리슨 서버와 전용 서버(데디케이티드 서버)가 있습니다. 데디케이티드 서버와 리슨서버 + P2P 데디케이티드 서버는 호스트 역할만을 전담하는 하나의 시스템이 모든 사용자들 즉, 클라이언트들을 수용하는 방식의 게임 서버 모델입니다. 즉, 호스트 컴퓨터가 모든 클라이언트를 담당하는 것입니다. 데디케이티드 서버를 사용하면 365일 24시간 물리적인 서버가 켜져있기 때문에 모든 유저들은 특정 서버에 접속하여 게임을 할 수 있습니다. 반대로, 리슨서버는 사용자의 게임 클라이언트 자체가 서버 호스트가 되는 모델입니다. 즉, 클라이언트 중 한명이 호스트를 담당하여 서버의 역할을 갖는 것입니다. 또한 게임에 참가한 모두가 호스트 역할을 수행하는 P2P(피어 투 피어)라고도 방식..

[C++] 동적할당/바인딩, 가상함수/테이블, 추상클래스, 인터페이스, 가상소멸자

동적할당 컴파일 시에 메모리를 할당하는 정적할당과 달리, 런타임 중에 메모리를 할당하는 것을 말합니다. C++에서는 new 연산자를 사용하여 동적할당하고, 사용이 끝난 이후엔 반드시 메모리를 해제해 줘야 합니다. 그렇지 않을 경우 메모리 누수가 발생하여 성능 저하나 예기치 못한 오류가 발생할 수 있습니다. new/delete와 malloc/free 차이 new와 delete는 호출 시 생성자와 소멸자를 각각 호출합니다. 또한 new는 메모리를 할당할 때 자료형 단위로 할당합니다. malloc과 free는 호출 시 생성자와 소멸자를 호출하지 않습니다. 또한 malloc은 메모리를 할당할 때 바이트 단위로 할당합니다. 바인딩 프로그램 실행 시 변수나 함수들은 그 내용을 저장할 메모리를 할당해야 하는데, 그 ..

[자료구조] 해시 테이블(Hash Table)

해시 테이블 해시테이블은 효율적으로 빠른 탐색을 하기 위한 자료구조로, key-value 쌍의 데이터를 입력받습니다. 해시 Function h에 key 값을 입력으로 넣어 얻은 해시값 h(k)를 위치로 지정하여 key-value 데이터 쌍을 저장합니다. 키는 무조건 존재해야 하며, 중복되는 키가 있어서는 안됩니다. 해시 테이블을 구성하고 있는 key-value 데이터를 저장할 수 있는 공간을 slot 또는 bucket이라고 합니다. > 해싱함수 더보기 해싱 함수 h(k) 어떤 키 k에 대한 테이블 주소를 계산하기 위한 방법으로 주어진 키 값으로부터 레코드가 저장되어 있는 주소를 산출해 낼 수 있는 수식을 말한다. 해싱 함수 h를 이용하여 key-value를 index : h에 저장하는데, 이것을 "키 k..

[백준/C++] 14889번 : 스타트와 링크 (브루트포스 + 백트래킹 연습)

스타트와 링크 문제 오늘은 스타트링크에 다니는 사람들이 모여서 축구를 해보려고 한다. 축구는 평일 오후에 하고 의무 참석도 아니다. 축구를 하기 위해 모인 사람은 총 N명이고 신기하게도 N은 짝수이다. 이제 N/2명으로 이루어진 스타트 팀과 링크 팀으로 사람들을 나눠야 한다. BOJ를 운영하는 회사 답게 사람에게 번호를 1부터 N까지로 배정했고, 아래와 같은 능력치를 조사했다. 능력치 Sij는 i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치이다. 팀의 능력치는 팀에 속한 모든 쌍의 능력치 Sij의 합이다. Sij는 Sji와 다를 수도 있으며, i번 사람과 j번 사람이 같은 팀에 속했을 때, 팀에 더해지는 능력치는 Sij와 Sji이다. N=4이고, S가 아래와 같은 경우를 살펴보자. ..

[자료구조] 배열과 리스트

배열 (Array) Array는 연관된 데이터를 메모리상에 연속적이고 순차적으로 저장하며, 미리 할당된 크기만큼 저장되는 자료구조입니다. Array의 장점은 조회(lookup)와 추가(append)가 빠르다는 것입니다. 따라서 조회를 자주 해야하는 작업에서는 Array를 사용합니다. Array의 단점은 고정된 저장 공간을 사용한다는 특성 상, 선언 시에 배열의 크기를 미리 정해야 한다는 것입니다. 이로인해 메모리 낭비나 추가적인 오버헤드가 발생할 수 있습니다. 시간복잡도 접근(access), 추가(append), 마지막 원소 삭제(delete) : O(1) 삽입(insertion), 삭제(deletion), 검색(search) : O(n) 미리 예상한 것보다 더 많은 수의 데이터를 저장하느라 배열 크기를..

728x90