전체 글 496

시스템 프로그래밍이란?

시스템 프로그래밍의 목적은,컴퓨터 소프트웨어를 만드는 것이다.어떠한 서비스를 다른 소프트웨어에게 제공하는 것이다. 즉 정리하자면,컴퓨터 시스템의 운영을 위한 응용 소프트웨어를 실행시키기 위한 플랫폼이다. 그러면 유닉스 시스템 프로그래밍은유닉스에서 제공하는 시스템 호출을 이용해서 프로그램을 작성하는 것이다.시스템 호출은 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록지원하는 프로그래밍 인터페이스를 의미한다. 마찬가지로 시스템이 제공하는 서비스를 이라는 키워드 붙는다. 시스템 프로그래밍을 이해하려면다음과 같은 시스템 소프트웨어, 시스템 호출과 같은 의미를 이해해야한다. 시스템이란 무엇인가?시스템에는 가장 대표적으로 컴퓨터 시스템이 있다.이외에도 조금 더 확장해서 어떠한 연산을 지원하는 장치도..

프로그래머스 LV.2 기능 개발

https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  현재 과정에서 + 속도가 100이 넘으면 dequeue에서 꺼내주는 방식으로 계속 돌리다가.다음 인덱스가 100이 넘지 않으면 자연스럽게 종료를 해주는 방식으로 구현했다. 이를 위해서 pair를 사용하여 구현하였다. 내가 짠 코드#include #include #include #include #include #include #includeusing namespace std;vector solution(vector progresses, vect..

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..