분류 전체보기 275

[프로그래머스] 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

[유니티] 프리팹(Prefabs)과 감지(Detection), 충돌(Collision) (2)

목표 - 프리팹의 개념을 이해하고 프리팹 인스턴스를 생성하기. - 프리팹화된 몹들을 감지하기. 충돌(Collision)과 감지(Detection) 게임을 하다 보면 몹의 특정 범위 내에 들어와서 공격을 받는 상황을 겪어보았을 것이다. 예를 들어보자. 타워 디펜스류 게임을 할 때 타워가 설치되고 몹을 인식하기 전까진 아무런 행동을 하지 않다가, 몹이 범위 안에 들어오면 공격을 하기 시작하는 것을 예로 들 수 있겠다. 이렇게 몹을 감지하고 공격하는 행동은 어떻게 해야 구현이 될까? 공격을 하기 위해선 몹을 감지하는 것이 우선이겠다. 여기서 감지(Detection)란 말 그대로 범위 내에 특정 오브젝트를 인식하는 것을 의미한다. 유니티에서는 감지를 하기 위해 자주 사용하는 것이 있는데, 바로 충돌(Collis..

Game/Unity 2023.02.01

[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에서 어떻게 처리되어야 할지 생각해보자. 어느정도 감이 오는가? 그렇다. 왼쪽 괄호 ..

[자료구조] 연속된 자료 구조와 연결된 자료구조 (2) with C++

연결된 자료 구조 앞선 시간에서 선형 자료 구조 중 연속된 자료 구조를 알아보았다. 이번 시간에는 여러 개의 메모리 청크인 노드(Node)에 데이터를 저장하는 연결된(Linked) 자료 구조를 연결된 자료 구조의 대표격인 연결 리스트를 통해 알아보자. 노드(Node): 연결 지점  연결 리스트(Linked list)란 각각의 노드가 저장할 데이터와 다음 노드를 가리키는 포인터를 갖고 있는 자료 구조를 의미한다. 이때 노드가 한 쪽 방향으로만 탐색이 가능한 것을 단일(Singly) 연결 리스트라고 하고, 앞 뒤 방향 모두 탐색이 가능한 것을 양방향(Doubly) 연결 리스트라고 한다. 이러한 연결 리스트를 그림으로 표현하면 다음과 같다.  이러한 개념에 착안하여 한 번 코드로 연결 리스트를 구현해보겠다. ..

CS/자료구조 2023.01.29

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

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

Language/C++ 2023.01.28