전체 글 386

Java와 C++의 차이로 배우는 소멸자와 const 멤버 함수

소멸자는 언제 호출되길래 소멸자라 부를까? 생성자가 언제 호출되는 지 기억하는가?오브젝트가 새로 만들어질 때이다.스택에 in place되거나 힙에 new로 할당 될 때이다.두 경우 모두 생성자가 호출된다. 그럼 소멸자는 이 객체가 지워질 때 호출된다.new 만든 객체가 delete로 지워질 때,스택에 만든 오브젝트면 스택에서 없어지면서 호출된다. 자바같은 경우에는 소멸자가 없다.없을 수 밖에 없는게 소멸자는 뭐 할 일이 없기 때문이다.C++는 소멸자가 있다.그 이유는 뭘까?C++는 메모리 관리를 스스로 해줘야한다.따라서 만약에 C++ 클래스 안에서 내가 메모리를 할당을 한 상황이라면내 오브젝트가 언제 지워지는 지 알아야그 안에서 할당한 메모리도 지울 수 있다.그 시기를 알기 위해서 사용하는 것이 소멸자이..

Java와 C++ 로 비교하는 - 초기화 리스트와 기본 생성자

대입의 개념과 초기화 리스트의 차이//Javaclass Vector{ public: vector() { //이건 대입 mX = 0; mY = 0 }}/C++class Vector{public : vector(); //이건 초기화 : mX(0),mY(0) {}}  실제 코드 상에서는 대입과 초기화 리스트가 차이가 없어보인다.근데 초기화 해야하는 이유는대입은 초기화가 된 이후에 실행되는 애이고,초기화 리스트는 실제 오브젝트가 만들어질 때 초기화하는 것이다. 초기화 리스트를 권장하는 이유는 다음과 같다.특히 멤버 변수를 대입 없이 초기화 할 수 있으며상수나 참조 변수도 초기화가 가능하다. 다음과 같이 const나 참조는 선언 이후에 대입할 수 ..

인공지능 - 길찾기 BFS

길 찾기 알고리즘은 두 지점의 경로상에 있는 장애물을 피해서 길을 찾는다.이 길 찾기의 복잡성은 두 점 사이에는 여러 다양한 경로 집합이 존재할 수 있다는 사실에 있다.하지만 이러한 경로 중 아주 적은 수의 경로만이 최단 경로이다.장애물의 표면을 따라 이동하는 AI는 지능적으로 보이지 않는다.그래서 최단 경로를 찾기 위해서 모든 가능한 경로를 효율적으로 탐색하기 위한 방법이 필요하다. 그래프 길 찾기 문제를 풀기 전에 먼저 AI가 통과할 수 있는 게임 세계의 부분을 표현하는 방법이 필요하다.일반적으로는 그래프 데이터 구조를 많이 선택한다.그래프는 일련의 노드를 포함한다. 이 노드는 에지를 통해서 서로 연결된다. 이 에지는 방향성이 없는 경우가 있는데방향성이 없다는 것은 양방향으로 이동할 수 있다는 걸 의..

그래픽스/OpenGL 2024.10.30

D3D11 Rasterization - Light

조명은 크게 3가지이다.Direction light, Point light, Spot light 이를 코드로 나타내면 다음과 같다.struct Light{ float3 Strength; float FalloffStart; // point/spot light only float3 Direction; // directional/spot light only float FalloffEnd; // point/spot light only float3 Position; // point light only float SpotPower; // spot light only};Directional light태양같이 아주 멀리 있는 광원을 가정한다.광원은 아주 멀리있다고 정의..

그래픽스/DX11 2024.10.30

물리 계층과 데이터 링크 계층 - 이더넷

물리 계층과 데이터 링크 계층은 통신이 이루어지는가장 근원적인 지점이다.하드웨어가 네트워크를 통해 메시지를 주고받고이해하는 방식은 대부분물리 계층과 데이터 링크 계층에 구현되어 있다.이더넷- 데이터 링크 계층과 물리 계층을 아우르는 기술인 이더넷 물리 계층과 데이터 링크 계층은 서로 밀접하게 연관되어 있다.오늘날의 두 계층은 이더넷이라는 공통된 기술이 사용되기 때문이다. 이더넷은 현대 LAN, 특히 유선 LAN 환경에서 가장 대중적으로 사용되는 기술이다.예를 들어서 두 대의 컴퓨터가 있다고 가정해보겠다.이 컴퓨터끼리 정보를 주고받으려면 가장 먼저 케이블과 같은 통신 매체가 필요하다.그리고 그 통신 매체를 통해 정보를 송수신하는 방법이 정해져 있어야 한다. 이더넷은 다양한 통신 매체의 규격들과 송수신되는 ..

트리를 이용한 파일 시스템 자료 구조 만들기

1. FileSystemDataStrcut.h에 필요한 헤더 파일을 포함한다.#pragma once#include #include #include  2. 디렉터리/파일 정보를 저장할 노드 구조체를 작성한다.// 파일 시스템의 노드를 나타내는 구조체 정의typedef struct nArrNode {    string name;  // 파일 또는 디렉토리의 이름    bool isDir;  // 이 노드가 디렉토리인지 여부 (true: 디렉토리, false: 파일)    vector children;  // 자식 노드들을 가리키는 포인터들의 벡터 (파일 또는 서브디렉토리)} nArrNode; 3. 사용하기 편하도록 nArrNode를 사용하여 트리를 구성한다.그리고 현재 디렉터리를 저장할 변수를 추가한다. s..

[백준 실버3] 9095 1, 2, 3 더하기

https://www.acmicpc.net/problem/9095 피보나치 수열 처럼 n-1 n-2 n-3을 더해주면 된다.직접 손으로 그려가며 경우의 수를 써봤는데 1일 땐 1의 경우의 수2일 땐 2의 경우의 수3일 땐 4의 경우의 수4일 땐 1 + 2 + 4 = 7의 경우의 수였으며,5일 땐 7 + 4 + 2 = 13의 경우의 수를 가졌다.  #include #include #include #include using namespace std;int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int T; cin >> T; while (T-- != 0) { int n = 0; cin >> n; if (n..

프로그래머스 LV.2 멀리 뛰기

https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  해당 문제를 해결하기 위해서는일단 효진이의 멀리 뛰기 경우의 수를 구하는 것이 먼저다. N번째 경우의 수는 N-1번째 경우의 수 + N-2번째 경우의 수와 같다. 이는 마치 피보나치 수열과 유사하다.피보나치 수열은 n = n-1 + n-2의 관계성을 띈다.다만 피보나치 수열과 다른점은 피보나치는 첫째 및 둘째 항이 1인데 그것만 제외하면 피보나치 수열과 동일하다. 이렇게 나온 값 % 1234567 = answer이 된다. 시간초과 난 코드#i..

Java와 C++/C 차이 개체 배열, 선언문 관례

//JavaVector[] list = new Vector[10]//C++Vector* list = new Vector 위는 실질적으로 다른 코드이다Java의 new는 실제 vector 10개의 공간만 있고아무런 값도 들어있지 않은 nullprt이 10개 만들어진다. 그마다 vector를 만들어주려면 for문 돌면서 Vector 10개 만들어 줘야한다. C++에서는 이런 혼돈이 없다.new Vector하면 진짜 Vector를 10개 만들어준다.즉, 포인터를 담을 수 있는 공간 10개를 만들어주는 것이 아니라오브젝트 10개를 진짜 만들어준다. 글로 말하면 이해가 조금 안되는데 다음 그림을 보면 이해가 쉬울 것이다. 때문에 Java에서는 Vector 포인터라고 하는 것과 같다. 따라서 Java에서의 코드를 ..

HSK 5급 듣기 스크립트 및 지문 타이핑

男 : 你买东西了? 里卖弄是什么啊? 女 : 新的鼠标,原来那个坏了。 问 : 女 的买什么? A。鼠标 B。数据线 C。键盘 D。显示器 男 : 你点击右键, 然先复制,然后把它粘贴到桌面上就行了。 女 : 原来这么简单, 谢谢你。 问 : 女的最可能在学什么? A。 预订机票 B。使用电脑 C。装修房子 D。钓鱼 电脑相关词汇 1. 电脑 컴퓨터 2. 主机 본체 3. 主板 마더보드 4.中央处理器중앙처리장치(CPU) 5.内存 RAM 6.显卡 GPU 7.存储设备 저장장치 8.硬盘 HDD 9.固态硬盘 SSD 10. 电源 파워 11.散热器 쿨러 12. 键盘 키보드 13. 鼠标 마우스 14. 触摸板 트랙패드 15. 显示器 모니터 16.文件夹 폴더 17.浏览器 브라우저 18. 网址 사이트 주소 19. 网络 인터넷 20. 移动硬盘 외장하드 21...

취미/HSK 2024.10.28