분류 전체보기 267

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

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

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

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

CS/자료구조 2023.01.29

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

시간 복잡도 데이터를 처리하기에 앞서 데이터를 어떻게, 어떤 형식으로 저장할 건지에 대한 자료 구조를 선택하는 것은 중요한 일이다. 이러한 선택을 하는데 있어 적합한 지표로는 알고리즘 복잡도인  시간 복잡도(Time complexity)가 있다. 이때 시간 복잡도란 특정 작업를 수행하는 데 걸리는 시간을 데이터 크기에 대한 수식으로 표현하는 방식이다.   시간 복잡도는 데이터 크기가 변경되면 연산 시간이 어떻게 변하는지 시각적으로 파악할 수 있게 한다. 이때 표기식은 일반적으로 점근 표기법(asymptotic notation) 중 BIG-O 표기법(BIG-O notation)을 사용하는데, 이는 함수의 증감 추세를 비교하여 알고리즘의 효율성을 파악하는 표기법이다. 이 표기법의 큰 특징은 최악의 경우까지 ..

CS/자료구조 2023.01.26

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

목표 - 프리팹의 개념을 이해하고 프리팹 인스턴스를 생성하기. - 프리팹화된 몹들을 감지하기. 프리팹(Prefabs) 게임을 하다 보면 동일한 목표를 가진 오브젝트가 여러 마리 생성되는 것을 쉽게 볼 수 있다. 예를 들어 보자. 우리가 한 번 씩 해본 메이플 스토리를 생각해보면, 사냥을 할 때 맵에 있는 몬스터들을 봤을 때 동일한 몬스터가 같은 패턴으로 행동한다. 일정 범위 내의 플레이어를 인식하고, 몬스터의 고유의 행동(공격)을 한다. 만약 이러한 몹들이 생성될 때마다 생성된 수만큼 오브젝트를 생성하고 컴포넌트를 부착한다면 굉장히 비효율적일 것이다. 이러한 상황을 해결하기 위해 사용하는 것이 바로 프리팹이다. Unity 공식 문서에 따르면 Unity의 프리팹 시스템은 게임 오브젝트를 생성, 설정 및 저..

Game/Unity 2023.01.26

[백준] 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

[로스트아크] 기초 가이드 - 악세서리와 어빌리티 스톤

성장 시스템 (2) 지난 편에는 장비와 재련을 통해 성장하는 방법을 알아보았습니다. 이번에는 장신구(악세서리, 팔찌)와 어빌리티스톤이 무엇인지 알아봅시다. - 악세서리 빨간색으로 칠한 오른쪽을 보면 목걸이, 귀걸이 2개, 반지 2개, 팔찌가 보입니다. 이를 악세서리로 분류합니다. 악세서리는 전설, 유물, 고대 단계로 나뉘는데 하나씩 알아봅시다. 위에 나와 있는 '추락한 혼돈의 반지'는 어비스 레이드 아르고스에서 드랍할 수 있는 전설 악세서리 중 하나입니다. 장비와 마찬가지로 아이템 레벨 1370부터 낄 수 있습니다. 최근엔 성장 구간 개편으로 인해 유물 악세서리를 착용하는 구간까지 빠르게 올라갈 수 있으므로, 카오스 던전 등에서 얻은 자신의 특성(특화, 치명, 신속)에 맞는 악세를 임시로 착용하고 계시면..

Game/LostArk 2023.01.24

[백준] 1978 C++

문제설명 입출력 예제 개념 주어진 자연수 중 소수의 개수를 출력하는 문제다. 여기서 소수란 약수가 1과 자기 자신밖에 없는 수를 의미한다. 알고리즘 1부터 입력된 수까지 순회하며 나눠지는 수가 존재한다면 소수가 아니므로 break를 건 후 다음 반복으로 넘어가고, 나눠지는 수가 없다면 소수의 개수를 늘리는 식으로 접근하면 되는 간단한 문제다. 풀이 #include using namespace std; int N, cnt; int check; int main() { cin >> N; while (N--) { int num; check = 0; cin >> num; for (int i = 1; i < num; i++) { if (num % i == 0 && i != 1) break; check++; } if..

Algorithm/백준 2023.01.23

[유니티] 오브젝트 이동 (2)

목표 - 오브젝트가 특정 경로를 따라 이동하게 구현 - 좌표와 애니메이션을 이용해 오브젝트가 움직이며 이동하게 구현 특정 경로를 따라 이동 이전 [유니티] 오브젝트 이동(1)에서는 기본적인 이동방법 2가지인 transform.Translate와 transform.position에 대해 간략하게 알아보았다. 이번 파트에서는 이 두 가지 방법 중 하나를 이용해서 경로를 따라 이동하는 것을 구현해보자. 다음과 같은 타일을 맵으로 해서 노란색 경로를 따라 지나가다 End를 만나면 멈추는 것을 구현해보자. Start부터 시작해서 꺾이는 분기점을 지나게 하려면 어떻게 해야할까? - Vector3.moveTowards 유니티 공식 문서에 따르면 Vector3의 프로퍼티중 MoveTowards는 다음과 같다. curr..

Game/Unity 2023.01.23

[로스트아크] 기초 가이드 - 장비와 재련

성장 시스템 로스트아크에는 성장하는 방법이 다양하게 존재합니다. 특수한 능력을 가진 장비를 제작하는 것부터 시작하여 기초적인 아이템 강화, 보석 레벨 성장, 스킬 트라이포드 활성화 등 많은 방법들이 있습니다. 어떤 것이 효율적일지는 뉴비들에게 어려울 수 있으니, 어떻게 하면 내 캐릭터를 강화할 수 있는지 성장 시스템에 대해 살펴봅시다. - 장비 작성자의 캐릭터를 기준으로 왼쪽을 머리부터 무기까지 총 6종류의 장비가 착용되어 있는 것을 알 수 있습니다. 이때 장비는 크게 전설 장비 / 유물 장비 / 고대 장비로 분류됩니다. 물론 카오스 던전에서 얻을 수 있는 장비, 어비스 던전에서 얻을 수 있는 장비 등도 있지만, 성장 구간 개편을 통해 빠르게 스킵하는 것이 가능하므로 크게 다루지는 않겠습니다. 전설 장비..

Game/LostArk 2023.01.21