분류 전체보기 763

[P3] 백준 12895번 화려한 마을 C++ 세그먼트 트리, 느리게 갱신되는 세그먼트 트리, 비트마스킹

리뷰 https://www.acmicpc.net/problem/12895맞왜틀 하고 있는데 질문게시판에서 쿼리의 범위 중 L이 R보다 크게 나오는 케이스가 있다는 것을 봤다.그걸 해결해주니 AC를 받았는데 음 문제에 기재하거나 예제에 있었으면 좋겠다는 생각이 들었다.로직은 맞게 구현해도 이런 것 때문에 틀린다면 시간을 많이 날릴 것 같다.  전역 변수N : 인덱스의 최대 크기를 저장할 상수 변수n : 집의 개수를 저장할 변수t : 사용할 색의 개수를 저장할 변수q : 작업의 개수를 저장할 변수tree : 세그먼트 트리 정보를 저장할 배열lazy : 업데이트 정보를 저장할 배열 함수1. buildvoid build(int node, int s, int e) { if (s == e) tree[node] = ..

[P5] 백준 1777번 순열복원 C++ 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/1777[P4] 백준 1849번 순열 C++ 세그먼트 트리 [P4] 백준 1849번 순열 C++ 세그먼트 트리리뷰 https://www.acmicpc.net/problem/1849구간 합 세그먼트 트리를 통해 답을 도출하는 문제  전역 변수N : 배열의 최대 크기를 저장할 상수 변수n : 수열 원소의 개수를 저장할 변수s : 매 원소를 입력zzzz955.tistory.com위 문제의 반대 버전  전역 변수N : 순열의 최대 크기를 저장할 상수 변수n : 순열의 크기를 저장할 변수s : 각 인버전 시퀀스 값을 저장할 변수lst : 순열의 인버전 시퀀스를 저장할 배열ans : 순열의 요소를 저장할 배열tree : 세그먼트 트리 정보를 저장할 배열..

[메타버스 게임] 캐쥬얼 배틀로얄 프로젝트 계층형 아키텍쳐 구현

개요빌드 환경을 구현하였으니 본격적인 서버 구현에 앞서 구현하고자 하는 아키텍쳐를 구상해봤다.내가 개발해야할 서버에선 클라이언트 세션을 관리하고 클라이언트 요청에 따라 인증, 매칭등의 서비스 로직을 구현해야 한다. 이를 데이터베이스와 통신하여 트랜잭션 처리를 통해 검증 및 상태 업데이트를 진행해 주어야 한다. 따라서 controller를 통해 클라이언트 요청을 구분하여 각 기능에 맞는 API를 호출할 수 있도록 서비스를 핸들해 주기로 했다. 예를 들어 인증 관련은 auth, 매칭 관련은 room, 게임 생명 주기 관리는 game의 컨트롤러 타입을 지정하고, 컨트롤러 핸들러를 통해 각 API가 호출될 수 있도록 나누어줬다. 처음엔 패킷을 주고 받을 때 최대한 적은 리소스를 사용하고자했지만 게임 내 이벤트에..

[P4] 백준 1849번 순열 C++ 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/1849구간 합 세그먼트 트리를 통해 답을 도출하는 문제  전역 변수N : 배열의 최대 크기를 저장할 상수 변수n : 수열 원소의 개수를 저장할 변수s : 매 원소를 입력 받을 변수lst : 초기엔 모두 1로, 이후엔 수열의 순서로 저장할 배열tree : 세그먼트 트리 정보를 저장할 배열 함수1. buildvoid build(int node, int s, int e) { if (s == e) tree[node] = lst[s]; else { int mid = (s + e) / 2; build(node * 2, s, mid); build(node * 2 + 1, mid + 1, e); tree[node] = tree[node * 2] +..

[메타버스 게임] 캐쥬얼 배틀로얄 프로젝트 Linux 빌드 환경 세팅(Makefile)

개요Windows에선 VisualStudio를 통해 편하게 빌드할 수 있었다면, Linux환경에선 Makefile을 통해 편하게 빌드할 수 있다.CMake가 크로스 플랫폼에서의 빌드 환경에 강점이 있다고 하는데 실제로 사용해 보니 그렇게 Windows와 Linux환경이 조금 많이 차이가 나서 왜 강점이라고 하는지는 잘 느끼지 못했다. 내가 잘못 썼을 가능성이 가장 크긴 하지만... Linux환경에선 패키지 유무가 C++ 프로젝트를 제대로 수행할 수 있는지 여부가 가장 크다, vcpkg를 clone하고 설치한 후 vcpkg.json을 통해 라이브러리를 설치 할 수 있다는 것은 Windows환경과 동일하다. 하지만 해당 라이브러리를 설치하는 과정에서 다양한 리눅스 패키지가 필요하기 때문에 오류가 자주 발생하..

[메타버스 게임] 캐쥬얼 배틀로얄 프로젝트 Windows 빌드 환경 세팅(VisualStudio)

개요vcpkg를 통해 설치한 라이브러리를 코드 작성 및 실제 컴파일 단계에서 오류 없이 사용하기 위해선 설치된 디렉토리를 프로젝트 속성에서 명시해 주어야 한다.이를 명시해 주지 않는다면 코드 작성 시 include 단계에서 부터 라이브러리를 인식하지 못하며, 링커 단계에서 라이브러리 디렉터리를 명시해 주지 않는다면 컴파일 단계에서 에러가 발생하게 된다. CMakeLists를 통해 CMake 빌드 환경을 구축할 수도 있지만 Windows환경에서 컴파일 및 빌드할 것이라면 더 쉽고 간편하게 VisualStudio 환경에서 세팅할 수 있는 방법을 알아보자  추가 포함 디렉토리프로젝트 -> 프로젝트 속성 -> C/C++ -> 일반 탭으로 이동해 준다.추가 포함 디렉터리에 vcpkg를 통해 설치한 include디..

[메타버스 게임] 캐쥬얼 배틀로얄 프로젝트 vcpkg C++ 라이브러리 설치

개요소켓 서버를 C++의 Boost.asio라이브러리를 기반으로 구현할 것이기 때문에 관련 패키지 설치가 필요하다.또한 PostgreSQL과 트랜잭션이 필요하므로 관련 라이브러리가 필요하다. 그 외에도 통신에 사용될 타입을 json으로 사용, 서버 로그를 기록하고 보안을 유지하기 위해 관련 라이브러리들의 설치가 필요하다. vcpkg를 사용한다면 마치 python의 venv처럼 프로젝트 내에서 필요한 패키지를 설치하고 사용할 수 있다.이는 컴퓨터 내에 전역으로 패키지를 설치하지 않기 때문에 다양한 장소에서도 레포지토리를 clone 후 이미 지정해 놓은 패키지들을 명시하여 설치해 줄 수 있어 편리하다.  vcpkg 설치윈도우 환경이라면 powerShell을 사용하여 설치할 수 있다.# vcpkg 저장소 클론..

[P4] 백준 11962번 Counting Haybales C++ 세그먼트 트리, 느리게 갱신되는 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/11962구간 업데이트 + 최소값 및 구간합 세그먼트 트리 문제  전역 변수N : 배열 크기의 최대값을 저장할 상수 변수n : 배열의 크기를 저장할 변수q : 쿼리의 개수를 저장할 변수lst : 배열의 초기값을 저장할 배열MS : 세그먼트 트리의 최소값 M, 구간 합 S를 정의할 구조체tree : 세그먼트 트리 정보를 저장할 MS타입 배열lazy : 세그먼트 트리의 느린 업데이트 처리를 위한 배열 함수1. buildvoid build(int node, int s, int e) { if (s == e) tree[node] = { lst[s], lst[s] }; else { int mid = (s + e) / 2; build(node * 2,..

[P4] 백준 2934번 LRH 식물 C++ 세그먼트 트리, 느리게 갱신되는 세그먼트 트리

리뷰 https://www.acmicpc.net/problem/2934문제를 봤을 때 이해가 잘 되지 않았는데 예시 그래프를 보고 이해 된 내용으로 시도했다.  전역 변수N : 좌표의 최대 범위를 저장할 상수 변수n : 식물을 심은 날의 수를 저장할 변수tree : 세그먼트 트리 정보를 저장할 배열lazy : 업데이트 정보를 저장할 배열 함수1. propagatevoid propagate(int node, int s, int e) { if (lazy[node]) { tree[node] += (e - s + 1) * lazy[node]; if (s != e) { lazy[node * 2] += lazy[node]; lazy[node * 2 + 1] += lazy[node]; } lazy[no..

[P3] 백준 18227번 성대나라의 물탱크 C++ 세그먼트 트리, 오일러 경로 테크닉

리뷰 https://www.acmicpc.net/problem/18227오일러 경로를 구할 때 노드의 깊이를 구해준 후 구간합 쿼리에 해당 깊이를 곱해준 뒤 출력하는 문제회사 문화 문제와 비슷하나 노드의 깊이를 구해주어야 하는 조건이 추가된 문제  전역 변수N : 배열의 최대 크기를 저장할 상수 변수n : 도시의 수를 저장할 변수c : 수도의 번호를 저장할 변수q : 쿼리의 개수를 저장할 변수tree : 세그먼트 트리 정보를 저장할 배열it : 오일러 경로의 진입 시점을 저장할 배열ot : 오일러 경로의 탈출 시점을 저장할 배열dep : 노드의 깊이를 저장할 배열t : 오일러 경로의 시간을 저장할 변수edges : 인접 리스트를 저장할 벡터 배열 함수1. dfsvoid dfs(int level, int ..

728x90