성댕쓰 똑똑한 생활

고정 헤더 영역

글 제목

메뉴 레이어

성댕쓰 똑똑한 생활

메뉴 리스트

  • 홈
  • 태그
  • 방명록
  • 분류 전체보기 (172)
    • 똑똑한 재테크 (1)
      • 올웨더 자산배분 (1)
    • 똑똑한 개발 (170)
      • Hazel 게임엔진개발 (0)
      • Algorithm 과 Data Structure (51)
      • C++ (18)
      • C# (8)
      • 개발로그 (0)
      • Image Processing (2)
      • C++ 게임개발 (60)
      • 컴퓨터 그래픽스 (10)
      • 수학 (13)
      • 영어 (8)

검색 레이어

성댕쓰 똑똑한 생활

검색 영역

컨텐츠 검색

똑똑한 개발

  • 링크드 리스트(LRU cache)

    2021.08.02 by 성댕쓰

  • 멀티쓰레드 개론

    2021.08.01 by 성댕쓰

  • 환경 설정

    2021.08.01 by 성댕쓰

  • 서버란 무엇일까

    2021.08.01 by 성댕쓰

  • C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈

    2021.08.01 by 성댕쓰

  • 링크드 리스트(리스트 중간지점 찾기)

    2021.07.29 by 성댕쓰

  • Merge Sort

    2021.07.29 by 성댕쓰

  • 링크드 리스트(정렬된 리스트 합치기)

    2021.07.27 by 성댕쓰

  • 링크드 리스트(여러 element삭제하기)

    2021.07.24 by 성댕쓰

  • 링크드 리스트(singly linked list) 구현

    2021.07.20 by 성댕쓰

링크드 리스트(LRU cache)

LRU cache 문제는 key-value를 저장하는 자료구조를 만드는 문제이다. put(key, value)로 저장하고 get(key)로 value를 리턴한다. 자료구조를 만들 때 max size를 설정하는데, 저장개수가 이 보다 크면 저장 데이터 한 개를 지우고 저장한다. 데이터를 지울 때는 규칙이 있다. Least Recently Used 즉, 가장 오래전에 사용한 데이터를 지운다. 문제이름 LRU cache는 지우는 규칙을 가리킨다. 사용한 순서를 알기 위해서 array를 사용할 수 있다. 그러나 array는 가장 먼저 사용한 아이템을 지우고 빈 자리를 메워야하는 제약때문에 O(n) time complexity가 필요하다. 문제에서 원하는 time complexity는 O(1)이다. doubly ..

똑똑한 개발/Algorithm 과 Data Structure 2021. 8. 2. 21:26

멀티쓰레드 개론

게임서버를 식당운영에 비유하면 직원과 영혼은 각 쓰레드와 CPU 코어이다. 하나의 코어로 여러 쓰레드를 동시에 실행할 수 없다. 빠르게 일을 처리해서 동시에 돌아가는 것처럼 보이는 것이다. 여러 쓰레드를 사용하는 장점 중 하나는 Heap영역과 데이터영역(static 변수)데이터를 공유할 수 있다는 점이다. 하지만 이 장점이 오히려 단점이 되는 경우가 많다. 참조 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 대시보드 - 인프런 | 강의 (inflearn.com)

똑똑한 개발/C++ 게임개발 2021. 8. 1. 21:54

환경 설정

Visual Studio 2019로 진행. 특이한 점 - precompiled header는 직접 만들어서 설정해줌. - 실제 폴더보다 필터를 사용함. - include 경로 잡을 때 vc 경로를 사용함. - server core는 static lib으로 만들고, client, server에서 참조해서 사용함. 참조 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 대시보드 - 인프런 | 강의 (inflearn.com)

똑똑한 개발/C++ 게임개발 2021. 8. 1. 21:36

서버란 무엇일까

서버는 식당을 영업하는 것과 비슷하다. 크게 웹서버와 게임서버가 있다. 웹서버 : 손님이 떠나면 연락이 끊긴다. (테이크아웃) - 실시간 interaction이 필요없다. - stateless이다. - 처음부터 만드는 경우는 사실상 없다. 게임서버 : 손님이 앉아서 주문한다. - 실사간 interaction이 필요. - stateful이다. - 게임엔진만 공부해서 간단히 사용불가능하다. 게임서버는 게임/장르에 따라 요구사항이 달라 최적의 프레임워크 존재하기 어려움. 참조 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 대시보드 - 인프런 | 강의 (inflearn.com)

똑똑한 개발/C++ 게임개발 2021. 8. 1. 20:40

C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈

강의 커리큘럼에 쓰레드 관련 내용을 배우고 싶어 강의를 듣게 되었다. 그 밖에 내가 모르는 지식들을 배울 있는 기회가 될 것 같다. 그리고 더 노력해서 게임 서버도 개발해보자. 재밌을 것 같다. 강의 : [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 대시보드 - 인프런 | 강의 (inflearn.com) [C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 - 인프런 | 강의 네트워크/멀티쓰레드/운영체제 등 핵심 전공 지식을 공부하고 게임 서버를 바닥부터 만들어보면서 MMORPG 기술을 학습하는 강의입니다. 신입 서버 프로그래머가 알아야 전반적인 지식을 모두 훑 www.inflearn.com

똑똑한 개발/C++ 게임개발 2021. 8. 1. 20:28

링크드 리스트(리스트 중간지점 찾기)

리스트의 끝까지 가면서 카운트를 알아낸 뒤, 중간까지 순회하는 방법이 있다. 위의 방법은 2path iteration이다. 길이를 알기위해 1번 답을 구하기 위해 1번 iterate했기 때문이다. 1path iteration으로 풀려면 아래와 같은 방법이 있다. array를 사용한다. 리스트를 array에 담으면 자동으로 length를 알게되고 미들인덱스 value를 리턴하면 된다. time complexity, space complexity는 O(n)이다. 1path iteration에 space complexity를 O(1)로 줄이는 방법도 있다. fast & slow pointer 방법이다. fast pointer는 2칸씩 움직이고 slow pointer는 1칸씩 움직인다. # Title : Lin..

똑똑한 개발/Algorithm 과 Data Structure 2021. 7. 29. 23:01

Merge Sort

Merge sort는 주어진 element array를 나눈뒤 합치면서 정렬하는 방법이다. time complexity는 O(nlogn)이다. stable한 성질을 가지고있다. # Title : Merge Sort # Chapter : Sorting # 문제: 주어진 array를 Merge sort 하여라 from typing import List def mergeSort(nums:List[int]) -> List[int]: # split length = len(nums) if length == 1: return nums mid = length // 2 left_nums = nums[:mid] right_nums = nums[mid:] sorted_left = mergeSort(left_nums) sor..

똑똑한 개발/Algorithm 과 Data Structure 2021. 7. 29. 21:38

링크드 리스트(정렬된 리스트 합치기)

정렬된 두 개의 링크드 리스트를 합치는(정렬하여) 문제이다. # Title : 두개의 정렬된 linked Lists 합치기 # Chapter : Linked List # 문제 : 주어진 두개의 정렬된 LinkedList를 정렬이 된 상태로 합쳐라 # L1 : 1→3→5→7 # L2 : 1→2→3→4 # L1+L2 : 1→1→2→3→3→4→5→7 from typing import List class ListNode: def __init__(self, val) -> None: self.val = val self.next = None def createList(in_list:List[int])-> ListNode: if len(in_list) == 0: raise RuntimeError('in_list mus..

똑똑한 개발/Algorithm 과 Data Structure 2021. 7. 27. 22:11

링크드 리스트(여러 element삭제하기)

리스트의 노드를 삭제하는 방법은 previous 노드를 삭제 노드의 next 노드와 연결해주면 된다. 하지만, 이 경우 head의 노드를 삭제하는 것이 불가능하다. 이를 해결하기 위해 recursive 방법을 쓸 수 있다. def recursive(self, node: ListNode) -> ListNode: if not node: return None next_node = self.recursive(node.next) if node.val == self.__val: return next_node else: node.next = next_node return node iterative 방법으로도 구현가능하다. head node 앞에 dummy node를 만들어서 사용하면 문제가 된 edge case를 처..

똑똑한 개발/Algorithm 과 Data Structure 2021. 7. 24. 22:36

링크드 리스트(singly linked list) 구현

구현하려는 동작 첫 번째 동작은 addAtHead이다. head가 가리키던 노드를 새로운 노드의 next가 가리키게 만들고 head가 가리키는 노드를 새로운 노드로 만든다. 두 번째 동작은 addBack이다. 링크드 리스트에 새로운 노드를 추가한다. 세 번째 동작은 find이다. 노드를 찾아 반환한다. 네 번째 동작은 addAfter이다. node, value를 파라미터로 받는다. node 다음에 value를 가진 새로운 노드를 추가한다. 마지막 동작은 deleteAfter이다. 편의상 delete 대신 구현하는 동작으로 파라미터로 받은 노드 다음의 노드를 삭제한다. from typing import Coroutine class ListNode: def __init__(self, val) -> None:..

똑똑한 개발/Algorithm 과 Data Structure 2021. 7. 20. 21:47

추가 정보

인기글

최신글

페이징

이전
1 ··· 11 12 13 14 15 16 17
다음
TISTORY
성댕쓰 똑똑한 생활 © Magazine Lab
페이스북 트위터 인스타그램 유투브 메일

티스토리툴바