본문 바로가기

전체 글

(60)
해시 해시란? 해시 자료구조는 키에 대응되는 값을 저장하는 자료구조이다. 우리가 주민등록번호나 전화번호에 맞는 숫자와 이름의 쌍을 생성한다고, 예제를 두었을때, 특정 번호가 누구의 것인지를 알아내는 일을 할 때 쓰인다. 다음과 같이 전화번호가 존재한다고 예를 들었을 때, 모든 데이터를 배열에 삽입하여 관리할 수도 있다. 이렇게 하게 될때, 삽입 연산은 0(1) , 데이터를 찾는 과정을 수행할 시엔 0(N), 특정 데이터를 제거할 시엔 다시 O(N)의 시간이 소요된다. 그렇지만 해시 자료구조에선느 insert, erase, find, update 등의 연산이 모두 O(1)이다. 이와 같은 이유는 해시 함수는 임의 길이의 데이터를 고정된 길이의 데이터로 대응시키는 함수의 역할을 수행하기 때문이다. 예를 들어, 3..
투 포인터 투 포인터란? 투 포인터란 배열에서 원래 이중 for문으로 O(N2)에 처리되는 작업을 2개 포인터의 움직으로 0(N)에 해결하는 알고리즘 그렇다면 투 포인터가 어떤 원리로 작동하기에 시간복잡도를 그렇게 줄일 수 있냐고 묻게 된다면 이렇게 말할 수 있다. 이중 for문에서 i = 0 일때 j 가 0부터 n -1 까지 돌고, 이처럼 i 가 n -1 일때까지 각각 인덱스는 i = 0, i = 1, i =... 일때까지 계산되어진 데이터를 전혀 쓰지않는다. 하지만 투 포인터를 이용한다면, i = 0일때 계산하면서 얻은 정보를 i = 1일때 활용하게된다. 그 전까지 계산된 값의 정보가 포인터의 이동으로 나타나는 것이다. 그래서 이전에 풀이하였던, 이분 탐색으로 투 포인터 문제를 풀 수 있는 경우가 있다. 반대로..
이분탐색 이분탐색이란? 이분 탐색이란 정렬되어 있는 배열에서 특정 데이터를 찾기 위해 모든 데이터를 순차적으로 확인하는 대신 탐색 범위를 절반으로 줄여가며 찾는 탐색 방법이다. 위의 선형탐색의 배열을 한번 살펴보게 된다면, 특정 데이터를 찾기 위해서 우리는 기존에 앞의 모든 데이터를 순차적으로 탐색 후 우리가 찾고자 하는 데이터를 얻는 순으로 진행된다. 예를 들어, 22라는 데이터를 찾는다고 가정할때, 0 -> 1 -> 2 -> .. -> 6값에 도달하였을때 데이터를 찾게 된다. 반면에 이분탐색은 정렬되어 있는 배열에서 특정 데이터를 찾기 위해 탐색 범위를 절반으로 줄여가며 찾는 탐색으로 진행된다. 선형탐색이 0(N)에 동작하고 이분탐색이 0(lgN)에 동작하기 때문에 N의 크기가 커질수록 프로그램의 실행 속도에..
Map Map이란? map은 각 노드가 key와 value 쌍으로 이루어진 트리입니다. 특히, 중복을 허용하지 않습니다. 따라서 map은 first, second가 있는 pair 객체로 저장되는 데 first- key로 second- value로 저장된다. C++의 map의 내부 구현은 검색, 삽입, 삭제가 O(logn) 인 레드블랙트리로 구성되어 있다. MAP 기본형 map map1; 3) MAP 정렬 map은 자료를 저장할때 내부에서 자동으로 정렬합니다. map은 key를 기준으로 정렬하며 오름차순으로 정렬합니다. 만약 내림차순으로 정렬하고 싶은 경우와 같이 사용하면 됩니다. map map1; (만약 다른 방법으로 int데이터를 내림차순으로 정렬하고 싶을 경우, 데이터에 -(마이너스)를 붙여 삽입하여 처리하..
우선 순위 큐 (Priority_Queue) Priority_Queue(우선순위큐)란?Queue의 한 종류로 이름 그대로 우선순위에 따라 정렬된 Queue이다.어떤 원소가 Push()된다면 주어진 우선순위에 맞춰서 Queue가 정렬되고, Pop()는 정렬된 Queue의 앞에서 이루어진다.자료구조 Heap으로 구현되어있으므로 O(logN)의 실행시간이 걸리게 된다. 헤더파일#include 자료형priority_queue 변수명// 선언한 자료형 변수들을 비교함수에 따라 정렬하는 메서드priority_queue 변수명// 선언한 자료형 변수들을 내림차순에 따라 정렬-empty() : priority_queue() =- null 일때, true or false 반환- size(): priority_queue() 우선순위의 크기를 반환 내림 차순 예제#i..
이진 검색 트리 이진 검색 트리의 단점: 이진 검색 트리 자체를 구현하는 것에 실수할 여지가 많고 자가 균형 트리가 적용되지 않은 이진 검색 트리는 시간복잡도가 안좋아서 높은 확률로 시간 초과가 발생하게 된다. 따라서, STL을 사용할 수 없는 환경에서의 이진 검색 트리를 사용하려고 노력하지 말자. 이진 트리 정의 이진 검색 트리를 정의하기 이전에 전에 공부했었던 이진 트리의 정의를 다시 떠올려보자. 각 노드의 자식이 2개 이하인 트리를 말합니다. 자식이 2개 이하이기 때문에 왼쪽 자식과 오른쪽 자식을 구별할 수 있다. 이진 검색 트리의 정의 왼쪽 서브트리의 모든 값은 모든 부모의 값보다 작고 오른쪽 서브트리의 모든 값은 부모의 값보다 큰 이진 트리이다. 이진 검색 트리의 장점 순차적인 원소에 접근하게 된다면, 배열이나..
Blueprint Blueprint는 코드없이도 게임을 개발할 수 있을정도로 기획 및 디자이너도 프로그래밍을 할 수 있을정도로 접근성이 매우 좋은 Visual Programming이다. 블루프린트에서 프로그래밍은 전기 회로를 연결하는 것과도 비슷하다. 예를 들어, 전기 스위치를 키면 조명이 켜지도록 설정해두는 리모컨과 같은 역할을 수행한다고 셍긱하면 된다. 블루프린터 자체에서 새롭게 접하는 용어가 생기기 떄문에 직접적인 공부를 시작하기 전에, 용어 정리를 한번 하고 시작하려고 한다. 먼저, 이벤트 그래프이다. 이벤트 그래프는 블루프린트를 그릴 캔버스이다. 이벤트 그래프에서 우클릭을 하게 되면 블루프린트에서 제공하는 많은 기능을 찾아볼 수 있다. 그중에서 먼저, Print string을 찾아봐야한다 이떄 해당 아이템을 선택..
알고리즘 기출 문제 정리 알고리즘 정리는 해당 아래 링크의 노션 페이지에서 따로 작성중이다. 블로그는 기본 알고리즘을 공부하게 된다면 아래 링크에서는 실제 알고리즘 별 문제 모음집이라고 생각하며 작성중이다. 노션에서는 따로 문제 풀이에 대한 코드 리뷰는 작성하지 않기로 하겠다. 이미 시중에 나와있는 수많은 풀이법이 존재하므로 스스로 정리, 확인용도로만 사용되는 예정이다. https://www.notion.so/2eb1ec6621864e38b7bb1a046e67ad31