전체 글

조용한 지식 저장소
개발자들은 C++, Python, Java와 같은 다양한 프로그래밍 언어로 프로그램을 만든다.하지만 컴퓨터의 CPU는 0101처럼 오직 0과 1로 이루어진 기계어만을 이해하기 때문에 인간이 작성한 코드를 컴퓨터가 이해하기 위해서는 코드를 기계어로 변환해주는 과정이 필요하다.이때, CPU에 정의된 기계어와 1대1로 대응되도록 만든 프로그래밍 언어가 어셈블리 언어이다.하지만 어셈블리어는 하드웨어 구조나 메모리 시스템에 대한 깊은 이해를 요구하기 때문에,간단히 Hello, world! 를 출력하는것조차 아래와 같은 복잡한 코드를 작성해야 한다. section .data msg db "Hello, World!"section .text global_start_start: mov rax, 1 mov rdi, 1..
· 알고리즘
https://www.acmicpc.net/problem/22940 가우스 소거법과 후진대입법을 이용하여 해결할 수 있다. 가우스 소거법(Gaussian Elimination)이란 n개의 미지수를 가진 n개의 식으로 이루어진 연립일차방정식을 첨가행렬을 이용하여 표현하고, 이것에 기본 행 연산(Elementary Row Operation)을 적용하여 행 사다리꼴 행렬을 만드는 방법이다. 이때, 기본 행 연산에는 행을 교환하거나 행에 상수 c를 곱하거나, 행에 상수 c를 곱한 뒤 다른 행과 더하는 연산이 있다. 이렇게 만든 행 사다리꼴 행렬에서 후진대입법을 이용하여 하나씩 변수의 값을 구해나갈 수 있다. 첨가행렬에서 대각원소를 기준으로 해당 대각원소를 포함한 행에 대해 대각원소의 값으로 나누는 행 연산을 ..
· 알고리즘
https://www.acmicpc.net/problem/9735 일반적으로 3차 방정식을 풀기 위해서 3차 방정식의 근의 공식을 사용할 수도 있지만,문제에서 -2000만~2000만 사이에서 정수근을 가진다는 조건을 주었기 때문에, 이를 이용해서 정수근의 값을 구한 다음에식을 인수분해하여 이차방정식을 구해서 최종적으로 근의 공식을 활용하여 나머지 두 근을 구하는 방법을 사용할 수 있다. 만약 한 정수근을 α라 한다면의 형태로 인수분해 할 수 있을 것이다. 이를 이용해서 코드를 작성하면 된다. 코드 (C++)#include #include #include #include using namespace std;const long double error_range = 0.0001;int main() { ..
· 알고리즘
https://www.acmicpc.net/problem/23250 우선 하노이탑을 해결하는 방법에는 여러가지 방법이 있다. Iterative Solution,Recursive Solution,Binary Solution. 보통 대부분 이 문제를 Recursive Solution의 형태로 푸는 것 같다.재귀함수를 통해 이동을 구하는 형태. 하지만 다른 방법들도 존재한다. 기둥이 3개인 하노이탑에서는 원반의 개수만 안다면 각 순서에 원반이 어디로 움직여야 하는지를 결정할 수 있다.왜냐하면 원반의 개수가 짝수라면 가장 작은 원반과 큰 원반은 서로 다른 방향으로 움직여야 하고, 원반의 개수가 홀수라면 서로 같은 방향으로 움직여야 하노이탑이 해결되기 때문이다.이를 조금 더 정리하면 원반에 부여된 번호의 짝홀..
· 공부
물리를 공부하다 보면 많은 어려움이 있다.진짜 이번에 시험 준비하면서 물리 망하는 줄 알았다.근데 물리 대신 수학을 망했다 그래서 내가 물리를 공부하면서 찾은 다양한 빠른 문제 풀이를 위한 이론들과 정리, 공식을 조용히 공개해보려고 한다. (짜피 시험 끝남 ㅋㅋ)하지만 나도 직접 깨부하면서 생각해낸 이론들이기 때문에, 틀린 내용이 있을 수도 있다.그래서 오류가 있다면 열심히 지적해주면 좋을 것 같다. 등가속도 운동우선 역학 하면 가장 먼저 생각나는 등가속도 운동 부분이다.보통 책에는 세가지 공식이 소개된다. 하지만 이 공식들에는 치명적인 단점이 있다.공식을 이용하게 되면 각 물리량의 절대적인 값을 요구한다는 것이다.하지만 대부분의 고난이도 문제에서는 절대적인 값이 아닌, 물리량이 비율관계의 형태로 제시되..
· Unity
Unity에는 다양한 이벤트 함수들이 있지만 그중에서 Update와 관련된 함수들을 가장 많이 사용하게 된다.이는 Update, FixedUpdate, LateUpdate로 3가지 종류가 있는데 이 세 함수들은 서로 호출 주기도 다르고 작동 방식도 다르다. Update매 프레임마다 호출되는 함수로 프레임마다 연산에 걸리는 시간이 다를 수 있기 때문에 호출되는 주기가 항상 일정하지 않다.Update 직전 프레임이 완료하는 데에 걸린 시간은 Time.deltaTime을 통해 가져올 수 있다. 호출 주기가 일정하지 않기 때문에 플레잉의 움직임 등을 Update에서 시행하게 된다면 항상 Time.deltaTime을 곱해서 플레이어가 일정한 속도로 움직일 수 있도록 보정을 해야 한다. Fixed UpdateUpd..
· C++
5월부터 게임 엔진을 만들기 시작했다. 중간에 잠시 중단한 적도 있지만 지금까지 약 7개월 동안 게임 엔진을 개발했다.그래서 현재까지 개발한 내용을 기록해보려고 한다. 현재까지 개발한 코드: https://github.com/airhood/CubicEngine GitHub - airhood/CubicEngineContribute to airhood/CubicEngine development by creating an account on GitHub.github.com  그래서 정확히 뭘 만들건데?우선 정확히 어떤 역할을 하는 게임 엔진을 어떤 구조로 만들 것인지 정해야 한다.프로젝트의 규모가 큰 만큼 다른 게임을 개발할 때처럼 대충 설계를 했다가는 나중에 가서 힘들어질 게 예상됐기 때문에 설계에 많은 시..
드디어 과학고등학교에 합격하게 되었다.오랜 기간동안 노력한 만큼 더 기뻤고, 과학고에서 하게 될 활동이나 생활이 기대되기도 했다. 과학고등학교 입학을 위해 준비했던 과정에서 다양한 경험을 했던 것 같다. 준비했던 과정을 돌아보고 나니, 다시 영재고나 과학고를 목표로 하여 준비한다고 했을 때 알면 좋은 정보들이 있어서 공유해보려고 한다.  우선 나는 영재고나 과학고를 목표로 하게 된 계기가 매우 단순하다. 좋아하는거 시켜준데서... 그저 다른 과목에 비해 수학, 과학, 코딩 분야에 관심이 많았기에 좋아하던거 계속 할 수 있는 길을 선택한 것 뿐이었다. 이렇게 영재고/과학고 진학을 목표하게 된 나는 중학교 3학년 초부터 준비하기 시작했다.사실 이전까지는 목표하기만 했지 영재고나 과학고의 특징이나 입학 전형,..
· C++
캐스팅이란?캐스팅이란 한 데이터 타입을 다른 데이터 타입으로 변환하는 과정을 말한다. C++에서 지원하는 캐스팅의 종류- static_cast- dynamic_cast- const_cast- reinterpret_cast  1. static_cast논리적으로 변환 가능한 타입을 변환하는 캐스팅으로 컴파일 타임에 타입 검사를 수행한다. static_cast(expression) int a = 10;float a_1 = static_cast(a);double a_2 = static_cast(a);float b = 5.7f;int b_1 = static_cast(b);double b_2 = static_cast(b);double c = 2.74;int c_1 = static_cast(c);float c_2 =..
· 알고리즘
정렬 알고리즘이란?정렬 알고리즘이란 목록 안에 있는 원소들을 순서대로 만들기 위해 사용하는 알고리즘이다. 정렬 알고리즘의 종류- 선택 정렬- 버블 정렬- 삽입 정렬- 병합(합병) 정렬- 퀵 정렬- 힙 정렬- 기수 정렬- 셸 정렬- 카운팅 정렬등 다양한 종류의 정렬 알고리즘이 있다. 그리고 정렬 알고리즘이라 보아야 되는지 모르겠는보고 정렬(Bogo sort) 이 중에서 많이 알려진 선택 정렬, 버블 정렬, 삽입 정렬, 병합 정렬, 퀵 정렬, 힙 정렬에 대해 알아보겠다. 정렬 알고리즘을 선택 시 고려해야 할 사항- 시간 복잡도- 메모리 사용량- 안정성- 데이터의 특성- 병렬 처리 가능성안정성?정렬 알고리즘을 사용했을 때, 같은 값을 가진 두 원소의 순서가 유지된다는 보장이 없다.안정적인 알고리즘버블 정렬, ..
Airhood
빛나는 코딩