profile
늅늅
post-thumbnail

Merge-Insertion Sort (병합 삽입 정렬)

merge-insertion sort Merge Sort와 Insertion Sort를 결합한 Merge Insertion Sort 작동방식 우선 N개요소를 2/N의 크기만큼으로 나누어 줌 나뉘어진 요소의 크기가 K보다 크다면 다시 절반으로 나누어 줌 K개보다 작은 크기로 나뉘어졌다면 각 요소들을 Insertion Sort로 정렬해줌 Insertion Sort로 정렬해준 K개의 요소들을 Merge Sort로 정렬하며 병합해줌 모두 정렬이 될때 까지 반복 구현 출처 https://iq.op

2023년 3월 24일
·
0개의 댓글
·

[C++] enable_if와 SFINAE

SFINAE란 > SFINAE는 "Substitution Failure Is Not An Error"의 약어로, C++ 템플릿 메타프로그래밍에서 사용되는 원칙. > SFINAE는 템플릿 인자 대입(substitution) 중에 실패(failure)하는 것이 오류(error)가 아니라는 것을 의미함. 따라서, 템플릿 인자 대입이 실패하면 해당 템플릿 함수나 클래스는 후보에서 제외된다. > 위 과정에서 함수 템플릿을 인스턴스화할 때, 인자나 결과가 유효하지 않다면 컴파일 에러를 뱉는 대신에 결과물에서 인스턴스화한 것을 지운다. 위의 코드를 보면 multiplication 함수가 있고 템플릿화한 multiplication 함수가 있다. multiplicatio 함수를 main에서 호출하려하면 컴파일러는 첫번째 함수가 더 적합하더라도 템플릿화된 함수를 인스턴스화 하려고 시도한다. 이 과정에서 int::multiplication_result라는 유효하지않은

2023년 3월 10일
·
0개의 댓글
·

[C++] CPP Module 08

CPP Module 08 > 07과 같이 템플릿을 사용하지만 여태 사용하짐 못했던 STL(Container, Iterator, Algorithm)을 적극적으로 사용하여 실습 > Sequential Container (iterator 존재 O) → std::vector, std::deque, std::list, std::forward_list > Adaptor Container (iterator 존재 X) → std::stack, std::queue, std::priority_queue ex00 > 컨테이너에서 value를 찾아 iterator를 반환해주는 easyfind()함수를 작성 이때 인자로 들어가는 컨테이너는 Sequential Container만 해당됨 template을 활용해 여러가지 컨테이너를 받을 수 있도록 함 std::find 활용해 value를 찾고 iterator를 반환 ex0

2022년 12월 24일
·
0개의 댓글
·

[C++] CPP Module 07

CPP Module 07 > C++ template을 실습 ex00 > 함수 템플릿을 정의해보고 호출해보기 template을 사용해 어떤 자료형이든 받아와서 사용할 수 있는 swap(a, b), min(a, b), max(a, b)함수 만들어보기 이때 세가지 함수에 들어가는 두 인자는 같은 자료형이어야 함 함수 템플릿의 정의와 선언은 모두 hpp 파일에서 이루어져야 함 ex01 > 배열의 포인터를 받아와 배열의 각 요소들에 func 함수를 적용시켜줘야 함 템플릿 함수를 함수 포인터로 받아와 사용 템플릿 함수를 호출 시 자료형을 지정해주어야 하지만 첫 인자에서 자료형이 정해진다면 지정해주지 않아도 됨 ex02 > 클래스 템플릿 Array를 정의 파라미터가 없는 생성자는 빈 Array를 생성 파라미터로 unsigned int를 받아왔다면 해당 갯수만큼의 인자를 가진 Array 생성 OCCF를 준수하여 작성 []를

2022년 12월 23일
·
0개의 댓글
·

[C++] CPP Module 06

CPP Module 06 > staticcast, dynamiccast등 여러종류의 type cast들을 실습 ex00 > 문자열을 인자로받고 이 문자열을 char, int, float, double로 변환하여 출력 출력할 수 없는 char은 표시할 수 없다고 출력 결과를 도출할 수 없거나 오버플로우가 발생시 impossible 출력 +inf, -inf, +inff, -inff, nan, nanf를 입력시 맞게 출력 static_cast static_cast(대상); 형변환시 사용되며 잘못된 형 변환에대한 오류를 체크해줌 double -> char 같은 사이즈가 작아지는 상황에서는 값이 사라질 수 있음 일반 포인터의 변환은 안되지만 상속관계의 포인터끼리 변환 가능, 다만 다운캐스트시 안전하지않음 Convert 클래스 ex01 > 구조가 있는 객체의 내용물을 바이트 배열로 저장하는 것을

2022년 12월 22일
·
0개의 댓글
·

[C++] CPP Module 05

CPP Module 05 > Exception을 활용한 예외처리 Throw 실습 try catch throw의 활용 ex00 > Bureaucrat 클래스 grade는 1이 가장 높은것이고 150이 가장 낮은것 (10에서 incGrade할 시 11이 됨) grade가 1~150을 벗어날 시 에러 에러 발생시 exception을 throw해주어 try catch문으로 에러를 받을 수 있게 해야함 std::exception을 상속받아 Bureaucrat::GradeTooHighException, Bureaucrat::GradeTooLowException 클래스를 만들어야 함 > exception 클래스 exception을 사용할 때 에는 throw 키워드를 사용하여 에러를 발생시킬 수 있고 throw로 에러를 발생시켰을때 실행중이던 컨텍스트를 종료하고 스택상 가장 가까운 catch를 찾아가게되는데 이때 catch가 존재하지 않는다면 프

2022년 12월 14일
·
0개의 댓글
·

[C++] CPP Module 04

CPP Module 04 > 다형성, 추상클래스, 인터페이스를 실습할 수 있는 과제 가상함수, 순수가상함수를 실습 orthodox canonical form은 항상 준수 생성자, 소멸자 호출시 적절한 메시지를 출력해주어야 함 ex00 > Animal 클래스 자식들이 재정의해서 사용할 makeSound()는 가상함수로 선언 소멸자도 가상함수로 만들어 적절하게 호출되도록 해야함 Protected인 함수, 변수는 외부에서는 접근이 불가능하고 자기자신과 자신을 상속받은 자식들만 접근할 수 있음 > Protected std::string type; > Public void makeSound(); 각 동물에게 적절한 울음소리를 출력 std::string getType(); type을 반환해줌 Cat 클래스 > Animal클래스를 상속받음 makeSound함수를 적절하게 오버로딩 type은 "Cat"으로 초기화되어야 함 >

2022년 12월 13일
·
0개의 댓글
·

[C++] CPP Module 03

CPP Module 03 > cpp03은 클래스의 상속과 관련한 실습을 할 수 있는 과제이다 여러가지 상황에서의 상속을 실습 -Wshadow, -Wno-shadow 플래그 사용해보기 ex00 > ClapTrap 클래스 모든 생성자와 소멸자는 호출시 메시지를 출력해야함. 모든 멤버변수는 실행시 적절한 메시지를 출력해야함. > Private Name (생성자 매개변수로 사용) Hit Points (10) Energy points (10) Attack damage (0) > Public void attack(const std::string& target); >> target에 attack시 target은 Attack damage만큼의 Hit points 감소하며 1 Energy Points 감소, 단 Energy points가 0이라면 불가. void takeDamage(unsigned int amount); >> a

2022년 12월 13일
·
0개의 댓글
·

[C++] CPP Module 02

CPP Module 02 > CPP02부터는 Orthodox Canonical Form 을 준수하여 작성해야함 Orthodox Canonical Form은 기본 생성자, 기본 소멸자, 복사 생성자, 할당 연산자 오버로딩을 명시적으로 선언해놓은 형식을 말함 이를 통해 클래스에 포인터나 참조 형식이 있을 때, 깊은복사 와 얕은복사를 비롯한 여러가지 잠재적인 버그를 해결하는데에 도움을 줄 수 있음 Cpp Module 02에서는 클래스의 생성자와 소멸자를 Orthodox Canonical Form으로 정의하고 여러 연산자들을 Overloading하는것을 실습할 수 있음 ex00 > 고정소수점을 표현할 수 있는 Class를 만들어보는 과제 Private멤버 고정소수점 값을 저장할 정수형 변수 분수 비트의 수를 저장하는 정적 정수형 상수. 이 상수는 항상 8의 값을 가짐 Public멤버 고정 소수점 값을 0으로 초기화해 줄 기본 생성자, 기본 소멸자, 복사

2022년 11월 24일
·
0개의 댓글
·

[C++]CPP Module 01

CPP module 01 ex00 > Zombie 클래스를 생성하고 해당 클래스를 heap영역과 stack영역에 할당해보고 차이를 실습해보는 과제 announce()는 문자열을 출력, randomchump()는 함수 내에서 좀비클래스를 생성, newZombie()는 new를 사용하여 Zombie클래스의 메모리를 할당하고 반환 ex01 > 00에서 만든 클래스를 클래스배열로 생성해보는 과제 N개의 Zombie클래스를 한번에 할당하고 한번에 반환해주어야 함 ex02 > 일반변수, 포인터변수, 레퍼런스변수를 사용해보고 차이점을 확인해보는 과제 "HI THIS IS BRAIN" 이라는 내용물을 담은 문자열을 작성 후 문자열의 주소를 담은 stringPTR 을 생성. 그리고 문자열의 참조를 담은 stringREF 생성. stringREF는 NULL일 수 없으며, stringREF의 값을 변경시 A의 값 역시 변경됨 ex03 >

2022년 11월 16일
·
0개의 댓글
·

[C++] CPP Module 00

CPP module 00 ex00 > c 표준출력을 사용하지않고 cout을 활용해 문자열을 대문자로 출력 ex) 구현 > ex01 > 간단한 전화번호부를 제작, 동적할당 금지, 최대 8개까지 저장, 8개 초과시 오래된 데이터를 삭제하고 저장, 프로그램은 비어있는채로 시작, 각 정보들을 저장할때는 각자 다른 클래스를 생성하고 저장 정보를 입력받아 저장하는 ADD, lastname, firstname, nickname, phonenumber, secret을 저장해야하고 NULL은 금지 간단한 정보를 보여주고 인덱스값을 입력받아 완전한 정보를 출력하는 SEARCH, 열의 너비는 10글자까지 오른쪽정렬로 출력, 각 구역은 '|' 로 구분함, 열의 너비보다 긴 문자의 마지막은 .으로 치환하여 출력 프로그램을 종료하는 EXIT 명령어를 구현하고 이외의 명령어는 무시 하나의 커맨드를 실행한 후 프로그램은 종료되지않고 새로운 커

2022년 11월 16일
·
0개의 댓글
·