전체 글 62

c++, c#, java, python 언어들의 컴파일 과정과 특징들

c++ 과 c# 의 특징과 장단점 -> c++ 은 메모리 할당과 해제를 직접 관리 할 수 있어서 메모리가 한정적인 시스템에서 유리하다. c# 은 메모리를 가비지 콜렉터를 통해서 자동으로 해제를 해주기 때문에 편리하다. 하지만 c++ 에도 스마트 포인터가 생겨서 편리하게 메모리 해제를 맡길 수 있다. c# 은 가비지 콜렉터가 돌아가면 느려진다. c# 은 중간언어인 CIL(common intermeditate languate) 인 바이트코드 형식으로 변경 후 clr(common language runtime)이라는 환경에서 각 환경에 맞는 기계어로 컴파일 됩니다. 어떤 언어든지 clr 에서 돌아가는 언어인 cil 로 변경되는 과정을 거칩니다. clr 은 닷넷 프레임워크의 가상 머신입니다. clr 에서 컴파일..

공부/기타 2023.05.23

aos, ios 네이티브 빌드&패키징 vs 언리얼 모바일 패키징

참고 : https://creazier.tistory.com/15310767 [AOS] 1. java 코드 작성 2. java 코드 바탕으로 class 파일 생성 3. class 파일 dex 파일로 변환 4. dex 파일과 사용중인 리소스들을 `apkbuilder`로 apk 파일 생성 5. zipalign`으로 apk 파일 binary aligning 6. 앱 사이닝 (사이닝 = 구글 플레이스토어에 제출하기 위한 과정? apk에 키값이라고 불리는 문자열을 같이 포함하는 건가?) 7. `adb` 혹은 스토어를 통해 apk 다운로드 (Android ADB (Android Debug Bridge)는 PC와 스마트 폰 간에 통신을 할 수 있는 명령어도 도구입니다. 안드로이드 개발자에게는 apk 설치, log 출..

에셋의 이동 및 수정

에셋의 이름을 바꾸고 경로를 바꾸는 행동은 에디터의 컨텐츠 브라우저 내에서 해야한다. 컨텐츠 브라우저 외에서, 예를 들어 윈도우 파일 탐색기 상에서 에셋을 옮기는(사실은 package 를 옮기는 것이다) 행동은 에셋에 대한 참조 관계를 고려하지 않기 때문에 옮겨진 경로나 이름으로 참조 관계가 업데이트 되지 않는다. 컨텐츠 브라우저에서 에셋의 이름을 바꾸거나 옮기는 경우는 참조 관계가 맞게 업데이트 됩니다. 만약 컨텐츠 브라우저에서 에셋을 다른 경로로 옮긴 경우, 기존 에셋 위치에는 ∴리디렉터가 남게 됩니다. ∴리디렉터란? 에셋을 이동하거나 이름을 바꾸면 원래의 장소에 리디렉터라는 것이 남는다. 이 리디렉터는 새로운 에셋의 경로를 가지고 있다. 이 리디렉터를 이용해 에셋을 참조하고 있던 에셋들이 새로운 에..

Package과 Asset 의 차이

Package .uasset 파일 Asset 컨텐츠 브라우저에 나타나는 것들. .uasset 파일에 포함된 대표적인 오브젝트. UObject 를 상속한 어떤 오브젝트라도 패키지의 대표 오브젝트가 될 수 있다. 패키지(.uasset)에 포함된 것이라고 볼 수 있다. Object Path 패키지 이름과 에셋 이름을 합친 경로. 예를 들어 SM_Chair 이란 패키지가 있고 대표 에셋이 SM_Chair 이면 Object Path 는 Game/.../SM_Chair.SM_Chair 이다. 에셋 생성 에디터에서 우클릭해서 에셋을 생성한다. 에셋 생성은 에셋 팩토리를 이용해 생성한다. UFactory 를 상속 받아서 특정 에셋의 팩토리 클래스를 구현 할 수 있다. 팩토리는 에셋을 찍어내는 클래스. UFactory ..

[Codility] Max Profit

링크 : https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/start/ 풀이 : Max Slice 의 또 다른 변형 문제이다. 이 알고리즘의 핵심은 최선의 값을 얻을 수 있는 조건이 되는 값(minPrice)을 찾아내는 것이다. 그리고 현재의 최선의 값과 지금까지의 최선의 값을 max 로 비교하여 최종적인 최선의 값을 얻어내는 방식인 것 같다. int solution(vector& arr) { if (arr.size() == 0) { return 0; } int maxProfit = 0; int minPrice = arr[0]; for (int index = 1; index < arr.size(); ++index..

[Codility] Max Slice Sum

링크 : https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/ Max Slice 알고리즘 설명 : https://haewoneee.tistory.com/161 기존 max slice 알고리즘에서 약간 변형해서 풀어야 한다. 모든 slice 의 합이 음수여도 0이 아닌 음수를 반환하도록 변형해야 한다. int solution(vector& arr) { int maxEnding = 0; int maxSlice = arr[0]; for (int index = 0; index < arr.size(); ++index) { int currentNum = arr[index]; maxSlice = max(maxSlice, ..

Prefix Sum 알고리즘

https://app.codility.com/programmers/lessons/5-prefix_sums/ n 개의 숫자가 있고, m 개의 쿼리에 각 쿼리마다 a 인덱스부터 b 인덱스까지의 숫자의 합을 구하는 문제 숫자들의 합산을 저장하는 배열을 선언하고 n 개의 숫자 배열을 순회하며 합산을 저장한다. a 부터 b 까지의 숫자들의 합은 합산 배열의 b 인덱스 에서 a - 1 인덱스 값을 뺀 결과값이다. prefix sum 알고리즘을 이용하면 m * n 의 시간 복잡도를 m + n 으로 줄여준다.

공부/Algorithm 2023.05.06

Max Slice 알고리즘

https://codility.com/media/train/7-MaxSlice.pdf Prefix Sum 을 이용하는 방법은 O(n^2) 의 시간 복잡도가 걸린다. O(n) 의 시간 복잡도가 걸리는 다른 방식이 있다. 9.3. Solution with O(n) time complexity This problem can be solved even faster. For each position, we compute the largest sum that ends in that position. If we assume that the maximum sum of a slice ending in position i equals max_ending, then the maximum slice ending in posi..

공부/Algorithm 2023.05.06

[Codility] Equi Leader

링크 : https://app.codility.com/programmers/lessons/8-leader/equi_leader/ 풀고 나서 이게 쉬움이라고??? 했던 문제 🤔🤔🤔 우선 Equi 리더를 만족 시키려면 원본 배열에 무조건 leader 숫자가 있어야 하고, 해당 숫자가 Equi 리더 배열에서도 leader 숫자일 것이다. 원본 배열의 leader 숫자가 아니였던 숫자는 equi leader 배열의 leader 숫자가 될 수 없을 것이다. 해당 가정으로 먼저 원본 배열에서 leader 숫자와 leader 숫자의 index 들을 찾아낸다. 그 다음 equi leader 을 찾아내기 위해 원본 배열을 순회한다. 인덱스 기준으로 배열을 두 개로 나눈 뒤에, 아까 찾았던 leader 숫자의 index ..

정수의 합이 오버 플로우 났을 때

정수의 합이 오버 플로우가 났을 때 더하는 정수들을 더 큰 자료형으로 캐스팅 한 후에 더한다. 더한 값을 동일하게 큰 자료형에 저장하면 오버 플로우가 나지 않고 정상적인 합을 구할 수 있다. int32_t num1 = INT32_MAX; int32_t num2 = INT32_MAX; // num1 + num2 의 값은 오버플로우가 나서 sum 은 -2 이다. int32_t sum = num1 + num2; // num1 + num2 의 값은 이미 오버플로우가 났기 때문에 int64에 저장해도 sum 은 -2 이다. int64_t sum = num1 + num2; // num1 과 num2 를 int64_t 형으로 캐스팅하면 오버플로우가 나지 않고 정상적인 값이 나온다. int64_t sum = (int6..

공부/C++ \C# 2023.05.03