전체 글 34

C언어 기반의 C++ 2

const와 포인터 const의 의미 // int형 변수 num을 상수화 const int num = 10; // 상수만을 가리키는 포인터. 포인터 ptr1을 이용해서 val1의 값을 변경할 수 없다. // 가리키는 대상은 변경이 가능하지만(ptr1=&val2;), 가리키는 값은 변경할 수 없다. const int * ptr1 = &val; // 포인터 ptr2가 상수화 된다. 정수형 변수를 가리키는 상수형 포인터. // 포인터가 가리키는 대상은 변경할 수 없고, 가리키는 값은 변경이 가능하다(*ptr2=100;) int * const ptr2 = &val; // 가리키는 대상 및 값의 변경이 불가능하다. // 포인터 ptr3가 상수화 되었으며, ptr3를 이용해서 val3의 값을 변경할 수 없다. co..

백준 15649. N과 M (1)

15649. N과 M (1) 자연수 N과 M이 주어졌을 때, 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열을 모두 구하는 문제이다. 최근에 역량 테스트에서는 거의 모든 문제에 N개중 M개를 고르는 것이 기본으로 들어가 있고 고른 것을 바탕으로 시뮬레이션을 하기 때문에 N개중 M개를 고르는 문제는 기본기로서 상당히 중요하다고 생각한다. 기본적이지만 선택하는 것이 꼬이면 끝까지 꼬일 수 있다고 생각한다.(개인적으로 경험이 있어서...) 풀이 과정 선택한것은 중복으로 선택하지 않기 위해 visit배열을 따로 만들었다. 선택하지 않았다면 선택후 visit를 true로 바꿔주고 go함수를 재귀 호출 하였다. count개만큼 선택했다면 저장한것들을 출력해주고 반환하였다. 반환하면서 visit도 false..

운영체제가 하는 일, 시스템 콜

운영체제란? 하드웨어와 응용 프로그램 (또는 사람) 사이 중간 역할 성능 향상을 도모 사용자 인터페이스 제공 운영체제가 하는 일 프로세스 관리 프로세스에 자원을 할당하고 프로세스의 자원을 회수한다. 운영체제가 자원을 할당하기 시작하면 프로세스가 생성되고 메모리 공간이 할당되고 CPU가 할당된다. 프로세스가 끝나면 운영체제가 자원을 회수하고 할당했던 메모리 공간 등을 회수한다. 주 기억 장치 관리 보조 기억 장치 관리 입출력 시스템 관리 운영체제 서비스 유저에게 유용한 기능을 제공 유저 인터페이스 프로그램 실행 입출력 작동 파일 시스템 조작 커뮤니케이션 오류 발견 리소스 공유를 통해 시스템 자체의 효율적인 운영을 보장 자원할당 계산 보호와 보안 System Calls(시스템 콜) 운영체제가 제공하는 서비스..

Command Pattern | 커맨드 패턴

Command Pattern 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 요청에 필요한 정보(함수명, 매개변수 등)를 저장, 로깅, 취소할 수 있게 하는 패턴이다. 관련 용어 Command 실행될 기능에 대한 인터페이스 실행될 기능을 Execute 함수로 선언한다. Receiver 객체를 가지고 있으며 Receiver 객체의 함수를 호출한다. 커맨드 객체는 별도로 Invoker 객체에 전달되어 명령을 발동하게 한다. ConcreteCommand 실제로 실행되는 기능을 구현하는 클래스 Command를 상속받아 구현한다. Invoker 기능의 실행을 요청하는 호출자 클래스 필요에 따라 명령 발동에 대한 기록을 남길 수 있다. 하나의 Invoker 객체에 다수의 Command..

Queue | 큐

Queue 먼저 들어간 데이터가 제일 먼저 나오는 FIFO(First In First Out)구조 한쪽 끝에서 데이터를 넣고 반대쪽 끝에서 원소를 제거할 수 있는 자료구조 Queue 연산의 시간복잡도 데이터를 추가(push) -> O(1) 데이터를 제거(pop) - O(1) 맨 앞 데이터를 조회(front) -> O(1) 맨 뒤 데이터를 조회(rear) -> O(1) Queue 응용 사례 대기열(영화관, 공항 ...) BFS Flood Fill Queue 구현 template class Queue { private: int* queue; int size; int head, tail; public: Queue(int qSize) : size(qSize + 1), head(0), tail(0) { queue..

Modern Cpp에 대해 정리하기 전 프리뷰

용어 사용 선언(declaration) : 코드에 사용되는 어떤 대상의 이름과 타입을 컴파일러에게 알려주는 것 std::size_t numDigits(int number); // 함수 선언 extern int x; // 객체 선언 class Widget; // 클래스 선언 template class GraphNode; // 템플릿 선언 시그니처(signature) : 함수의 매개변수 리스트와 반환 타입 위의 경우 numDigits 함수의 시그니처는 std::size_t(int) 정의(definition) : 선언에서 빠진 구체적인 세부사항을 컴파일러에게 제공하는 것 함수에 대한 정의는 함수에 대한 코드 본문을 제공하는것이다. 클래스에 대한 정의는 클래스의 멤버를 넣어 준 결과이다. 초기화(initiali..

백준 17471. 게리맨더링

17471. 게리맨더링 역량테스트에 나왔던 문제라고 해서 풀어보았다. 단순 알고리즘 적용보단 알고리즘 적용한 결과를 가지고 또다시 알고리즘을 적용하거나 시뮬레이션을 돌리는 형태로 문제가 많이 나오는 것 같다. 풀이 과정 선거구를 2개로 나눈다. N개의 구역이 있다면 N/2까지 나눠봐야 한다. 즉 N=6이면 (1,5), (2,4), (3,3)으로 나누면 된다. 지역을 나누는 것은 조합 짜듯 구현하였다. (go함수) 지역을 나누고 나선 나눈걸 각각 firstRegion, secondRegion에 넣어준다. 넣어준 것을 가지고 각 선거구 안에 있는 지역의 번호를 가지고 BFS를 돌려서 모두 연결이 되어있는지 확인하였다. (isConnected함수) firstRegion, secondRegion 모두 연결이 되..

액터 가져오기, Serialize

월드 내 모든 액터 가져오기 UWorld* CurrentWorld = GetWorld(); for (const auto& Entry : FActorRange(CurrentWorld)) { UE_LOG(LogTemp, Warning, TEXT("Actor : %s"), *Entry->GetName()); TArray Components; Entry->GetDefaultSubobjects(Components); for (const auto& CEntry : Components) { UE_LOG(LogTemp, Warning, TEXT(" -- Component : %s"), *CEntry->GetName()); } } 원하는 타입의 액터만 선별하여 가져오기 for (TActorIterator It(Curre..

언리얼엔진 컨테이너 종류

TArray, TSet, TMap 정리 TArray 기본 FString Arr[] = { TEXT("of"), TEXT("Tomorrow") }; StrArr.Append(Arr, ARRAY_COUNT(Arr)); StrArr == ["Hello","World","of","Tomorrow"] TArray IntArray; = 연산으로 복사 할 수 있다. 각종 함수 Append는 다른 TArray 또는 일반 배열로의 포인터 및 해당 배열의 크기에 다수의 엘리먼트를 한꺼번에 추가한다. Append 함수 대신 +=를 통해 배열을 연결시킬 수 있다. AddUnique는 기존 컨테이너에 동일한 요소가 이미 존재하지 않는 경우 새 요소만 추가한다. Insert는 Add, Emplace, Append 처럼 단일 엘리..