C++ 143

[자료구조] vector with C++ (2)

std::vector 구현  이제부터 vector를 간단하게 구현해 보겠다. 우리의 목적은 크기가 유동적으로 조절되는 배열을 만드는 것이고, 용량은 1.5배씩 늘리도록 하겠다. #include using namespace std;templateclass vector{ T* _data = nullptr; // 데이터의 주소값 int _size = 0; // 크기 int _capacity = 0; // 용량 먼저 벡터에 담을 데이터의 주솟값과, 크기, 용량 변수를 초기화해준다. public: vector() { } // 기본 생성자 ~vector() // 소멸자 { if (_data) // 소멸자가 실행될 때 벡터 내에 데이터가 존재하면 delete[] _data; // 할당 해제 } 기본 생성자를 만..

CS/자료구조 2023.02.11

[자료구조] vector with C++ (1)

std::vector 지난 시간에 크기가 고정되는 배열 std::array에 대해 살펴보았다. 예고한 것처럼 C 스타일의 배열의 한계를 극복한 가변 크기 배열 std::vector에 대해 알아보자. 벡터는 Cpp reference에 다음과 같이 정의되어 있다.   직역하자면 연속적으로 저장되는 가변 배열이라는 의미다. 즉, 연속된 자료구조이며 크기를 늘리거나 줄여 원소를 변경할 수 있는 배열이라고 생각하면 되겠다. 이러한 벡터를 사용하기 위해서는 vector 라이브러리를 받아와서 다음과 같은 형태로 사용하면 된다. #include #include using namespace std;int main(){ vector v = { 1,2,3,4,5 }; // 크기가 5인 int형 가변 배열 vect..

CS/자료구조 2023.02.10

[프로그래머스] n^2 배열 자르기 with C++

문제 설명 제한 사항 및 입출력 예제 알고리즘 개념 알고리즘(1) 정해진 규칙에 의해 생성되는 배열의 일부분을 출력하는 문제다. 제한사항을 보면 n과 left, right의 값이 상당히 크므로 시간 초과를 주의해야 한다. 즉, 배열을 초기화하려면 시간 복잡도가 O(n^2)이 될 텐데, O(n)으로 줄이는 것을 목표로 하자. 그렇다면 우리는 배열의 규칙성을 찾아 left와 right 사이의 인덱스 값을 통해 바로 배열의 값을 구해야 한다. 이를 구하기 위해 예제에 나와 있는 n = 3의 배열을 시각화해 보자. 어떤 규칙성이 보이는가? 먼저 확인할 수 있는 것은 다음과 같다. 행이 바뀔 때마다 첫 번째 행을 기준으로 일련의 규칙에 따라 값이 바뀐다. 다음 사진에서 기준인 값은 1, 2, 3이다. 이 값을 기..

[C++] CH4 객체 포인터, 배열, 동적 할당 (2)

객체와 객체 배열의 동적 생성 및 반환 // 예제 4-7 #include using namespace std; class Circle { int radius; public: Circle(); // default constructor Circle(int r); // constructor ~Circle(); // destructor void setRadius(int r) { radius = r; } // Inline function double getArea() { return 3.14 * radius * radius; } // Inline function }; Circle::Circle() : radius(1) {} Circle::Circle(int r) { radius = r; cout

Language/C++ 2023.02.03

[C++] CH3 클래스와 객체 (2)

소멸자 소멸자 : 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수. 특징 소멸자(destructor)의 목적은 객체가 사라질 때 필요한 마무리 작업을 하기 위함이다. 소멸자의 이름은 클래스 이름 앞에 ~를 붙인다. 생성자와 같이 리턴 타입이 없고, 어떤 값도 리턴해서도 안 된다. 생성자와 같이 오직 한 개만 존재하며, 매개 변수를 가지지 않는다. 소멸자가 선언되어 있지 않으면 기본 소멸자가 자동으로 생성된다. 생성된 반대 순으로 객체가 소멸됨. 반지름 1인 원 생성 -> 반지름 30인 원 생성 -> 반지름 30인 원 소멸 -> 반지름 1인 원 소멸 // 예제 3-7 #include using namespace std; class Circle { public: int radius; Circl..

Language/C++ 2023.01.30

[프로그래머스] 괄호 회전하기 with C++

문제 설명 제한 사항 및 입출력 예제 알고리즘 개념 괄호 문자의 규칙을 찾으면 되는 문제다. 내가 알고 있는 기존의 괄호 규칙은 총 3가지다. 왼쪽 괄호의 개수와 오른쪽 괄호의 개수가 같아야 한다 같은 타입의 괄호에서 왼쪽 괄호는 오른쪽 괄호보다 먼저 나와야 한다 서로 다른 타입의 왼쪽 괄호와 오른쪽 괄호쌍은 서로 교차하면 안 된다 상당히 복잡해보이지만, 이 규칙을 자료 구조를 이용하여 한 번에 적용하여 해결할 수 있다. 바로 stack인데, 값을 push하기 전에 마지막 값과 비교하여 괄호 문자의 규칙을 만족하면 제거하거나 푸시하면 풀린다. 예를 들어 "()[]{}"와 "([]){}", "({)}[]"가 각각 stack에서 어떻게 처리되어야 할지 생각해보자. 어느정도 감이 오는가? 그렇다. 왼쪽 괄호 ..

[C++] CH3 클래스와 객체 (1)

객체에 대한 이해 캡슐화 : 객체(object)의 구성 요소들을 캡슐로 싸서 보호하고 볼 수 없게 하는 것으로, 객체의 가장 본질적인 특성 객체는 이 캡슐화(encapsulation)를 통해 외부의 접근을 통제하여 자신의 내부 요소들을 보호한다. 구성: 상태(state)인 멤버 변수와 행동(behavior)인 멤버 함수 행동으로 상태가 변하고, 어떤 행동은 객체 상태를 외부로 전달 클래스 : 객체를 정의하는 틀 혹은 설계도로서, 클래스에 멤버 변수와 멤버 함수를 선언한다. 이때 객체는 클래스라는 틀에서 찍어낸 멤버 변수와 멤버 함수를 실제로 갖고, C++ 프로그램이 실행되는 동안 실존하는 실체(instance)다. 객체가 생성되면 상호 별도 공간에 생성된다. 요약 캡슐화: 객체의 구성 요소들을 보호하는 ..

Language/C++ 2023.01.28

[백준] 2839 C++

문제설명 입출력 예제 개념 N이 주어졌을 때, 주어진 3kg 봉지와 5kg 봉지를 이용해 3x + 5y = N을 만족하는 최소의 정수쌍의 합을 구하는 문제다. 이때 이러한 해를 만족하는 정수쌍이 존재하지 않을 때는 -1을 출력해야 하며, x나 y에 0이 들어갈 수 있다는 것을 유념해야 한다. 알고리즘 필자의 경우엔 3x + 5y = N을 y에 대해 정리하여 y = -3x/5 + N/5로 표현한 뒤, 다음과 같은 과정으로 문제를 풀었다. x = 0부터 y = -3x/5 + N/5가 정수가 되는 (x,y)의 값을 찾고, 배열에 x + y를 넣음 (개수를 묻는 문제이므로) 만약 -3x/5 + N/5 < 0이 되면 더이상 0을 넘는 값을 찾을 수 없음 일련의 과정을 통해 x + y의 값을 배열에 넣은 후, 배열..

Algorithm/백준 2023.01.24