본문 바로가기
[algorithm] 최대공약수(GCD)와 최소공배수(LCM) (유클리드 호제법) 최소공배수최소공배수를 구하는 쉬운 방법은 유클리드 호제법을 사용하는 것이다.$$ \text{유클리드 호제법}\\\text{두 자연수 } a, b (a > b)\text{에 대하여}\\a\text{를 } b \text{로 나눈 나머지가 }r \text{일 때}\\a, b \text{의 최대 공약수는 }b, r \text{의 최대 공약수와 같다.}\\\text{즉 } \gcd(a,b) = \gcd(b,r)\\r = 0 \text{의 경우 }a,b \text{의 최대공약수는 }b \text{가 된다.}$$ 계산과정두 수 1568과 1260이 있을 때 두 수중 더 큰 1568을 a 1260을 b로 두고 계산한다.1568 % 1260 = 308, 1260은 나누어 떨어지지 않음 다시 나눔1260 % 308 = 2.. 2025. 2. 14.
[Math] 행렬식 선형변환을 수행할 때 때때로 공간을 확장 또는 축소하게 되는데 변화하는 공간의 비율을 행렬식이라고 한다.위의 경우 면적이 기존보다 6배 증가한다. 즉 행렬식은 6이다. 단순한 회전이나 전단의 경우 면적이 변하지 않으므로 행렬식에 영향을 주지 않아야 한다.즉 행렬식은 1로 유지되며 변하지 않는다.  i와 j가 뒤집히면 행렬식은 음수가 된다. 행렬식이 알려주는 가장 중요한 정보는 선형 종속인지 여부이다.만약 행렬식이 0이라면 공간이 더 작은 차원으로 줄어들었다는 뜻이다.따라서 0 행렬식을 테스트하는 것은 변환에 선형종속이 있는지 확인하는데 매우 유용하다. 2024. 11. 22.
[Math] 선형 변환 기저 벡터두 벡터 (i hat)와 (j hat)가 있을 때 다른 벡터의 변환을 설명하는데 사용되는 이런 벡터를 기저벡터라고 한다.일반적으로 아래처럼 길이가 1이고 서로 수직이며 양의 방향을 가리킨다.위의 기저벡터는 2 X 2 행렬로 표현되며 첫 번째 열이 i hat 두 번째 열이 j hat이다. 선형변환기저벡터를 사용해 벡터 v를 만들었을 때 기저 벡터를 스케일링하면 벡터 v 또한 기저 벡터를 따라 변하게 된다.이를 선형변환(linear transformation)이라고 한다.  일반적으로 선형변환을 사용하면 아래와 같이 네가지 동작을 수행할 수 있다. 기저벡터 스케일회전전단반전스케일벡터의 크기를 조정하면 벡터가 늘어나거나 줄어든다.회전벡터공간을 회전시킨다.전단특정방향의 직선과의 거리에 비례하여 각 포인.. 2024. 11. 21.
[Math] 스팬과 선형종속 스팬(span)방향이 다른 두 벡터를 합과 크기를 조절하는 두 가지 연산을 사용하여 원하는 결과벡터를 만들 수 있다.이때 가능한 벡터의 전체 공간을 스팬이라 한다. 아래는 두 벡터를 스케일링과 합을 사용해 새로운 벡터를 만드는 예를 보여준다.서로 다른 벡터 2개가 있을 때 두 벡터는 선형 독립이며 스팬이 무한하다.만약 두 벡터가 같은 방향으로 존재하거나 같은 선상에 존재하는 경우 벡터를 조합하더라도 항상 선 위에 고정되기에 스팬이 제한된다. 즉 선형 종속이 된다.만약 3차원 이상에서 선형 종속인 벡터들은 더 적은 수의 차원으로 제한된다.예를 들어 3차원에서 선형 종속이 생긴 경우 평면 혹은 하나의 선으로 스팬이 제한될 수 있다. 2024. 11. 15.
[Math] 행렬(Matrix) 1. 행렬의 정의수 또는 대수를 직사각형 형태로 나열한 것각 요소는 행렬의 특정 위치에 있는 값으로 정의되며 다음과 같이 표현된다.여기서 aij는 i번째 행과 j번째 열의 요소를 나타낸다. 예를 들어 위의 행렬은 3X2 행렬이며 (3, 1) 성분은 e가 된다.2. 행렬의 종류정방행렬(square matrix)행과 열의 수가 같은 행렬 영행렬(zero matrix)모든 요소가 0인 행렬 대각행렬(diagonal matrix) 주대각선을 제외한 요소가 모두 0인 정사각형 행렬 단위행렬 · 항등행렬(unit matrix ·  identity matrix)주대각선 요소가 모두 1이고 나머지 요소가 0인 정사각형 행렬 전치행렬(transposed matrix) 행과 열을 교환하여 얻는 행렬즉, 주대각선을 축으로 .. 2024. 11. 8.
[Math] 벡터의 일차 결합 벡터의 일차 결합 (Linear Combination) 주어진 벡터들을 스칼라 값으로 곱하고 더하는 과정W = αV₁ + βV₂이때 α와 β는 상수 벡터의 내분벡터의 내분은 0  t  1 일때 주어진 두 점을 특정 비율(1 - t : t)로 나누는 과정을 말하며 다음과 같이 정의한다.p = (1 - t)a + tB이를 변형하면 다음과 같다p = a + t(b - a) 활용선형보간내분을 통해 시작지점에서 목표지점으로 부드럽게 이동시킬 수 있다.static void Main(){ Vector startPoint = new Vector(0, 0); Vector endPoint = new Vector(10, 10); float duration = 2.0f; // 이동 시간 (초) // 보간.. 2024. 10. 10.
[Math] 벡터의 내적(Dot Product)과 외적(Cross Product) 내적(Dot Product)두 벡터의 내적은 두 벡터의 크기와 방향의 유사성을 측정하여 하나의 스칼라값을 구하는 연산이다.1) a⋅b=a1​×b1​+a2​×b22) A⋅B=∣A∣∣B∣cosθ벡터 a=[2,1]와 b=[3,0​]의 내적은 다음과 같다.a⋅b=2​×3​+1​×0 = 6특징스칼라 값을 반환한다.교환법칙이 성립한다.두 벡터가 이루는 각도에 따른 내적 값0도일 때 (같은 방향일 때) 벡터의 크기의 곱90도일 때 (서로 수직) 0두 벡터가 반대 방향(90도를 초과해서 차이날 때)일 때는 음수 값을 반환한다.활용시야(FOV: Field of View)계산내적을 통해 적이 시야 내에 있는지 확인 할 수 있다.bool Fov(Vector3 originPosition, Vector3 direction, V.. 2024. 9. 30.
[Math] 벡터 (Vector)와 스칼라(Scala) 벡터와 스칼라스칼라스칼라는 방향이 없는 단순 값을 나타낸다.온도(30도), 길이(5미터), 질량(2킬로그램)등이 스칼라에 해당한다.벡터스칼라를 배열의 형태로 나열한 것으로 방향과 크기를 가진다.좌표 [1,2], 물체에 작용하는 힘의 크기와 방향등이 벡터에 해당한다.벡터는 방향과 크기를 모두 가진다.예를 들어 [2,1]라는 벡터를 화살표로 표현하면 다음과 같다.  벡터의 연산1. 벡터의 합벡터와 벡터를 더할 때는 같은 성분끼리 더한다.예를 들어, 두 벡터 두 벡터 v1=[1,2]와 v2=[3, 4]의 합은 다음과 같다.v3​=v1​+v2​=[1+3,2+4]=[4,6] 2. 벡터의 스칼라 곱벡터와 스칼라를 곱하면, 벡터의 각 성분에 스칼라 값을 곱한다.예를 들어, 벡터 [2,3]에 스칼라 2를 곱하면 다음과.. 2024. 9. 30.
[Git] Git 기초 (init, clon, status, log, add, commit) 1. 저장소 초기화 및 클론저장소 초기화: 현재 디렉토리를 Git 저장소로 초기화한다.$ git init저장소 클론: 원격 저장소를 로컬에 복제한다.$ git clon  2. 상태 확인 및 로그보기상태확인: 작업디렉토리와 스테이징 영역의 상태를 보여준다.$git statusgit status출력 예시On branch main //현재 브랜치Changes to be committed: //스테이징 영역  new file:   file1.txt //새로 추가된 파일  modified:   file2.txt //수정된 파일  deleted:   file3.txt //삭제된 파일Changes not staged for commit: //작업 디렉토리  modified:   file4.txt //위와 동일Untr.. 2024. 9. 30.
[Coding Test] 하노이의 탑/c++ https://school.programmers.co.kr/learn/courses/30/lessons/12946 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 하노이의 탑은 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있다.퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있고 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓아야 한다. 조건은 아래와 같다.한 번에 하나의 원판만 옮길 수 있다.큰 원판이 작은 원판 위에 있어서는 안 된다. 큰 원판이 .. 2024. 9. 30.
[Coding Test] 석유 시추 / C++ https://school.programmers.co.kr/learn/courses/30/lessons/250136?language=cpp# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 가장 먼저 시도한 방법은 각 열에 대한 배열을 두고 DFS로 석유 덩어리를 탐색하여 해당하는 모든 열에 덩어리의 크기를 더해주는 방식을 사용했다.#include #include using namespace std;inline bool OutRange(vector> land, int x, int y){ if(x >* land, int x, int y){ if(Out.. 2024. 9. 30.
[Git] 저장소 만들기 Git 저장소를 만드는 방법은 두 가지다. 기존 프로젝트나 디렉터리를 Git 저장소로 만드는 방법이 있고, 다른 서버에 있는 저장소를 clone 하는 방법이 있다. 기존 디렉터리를 Git 저장소로 만들기기존 디렉터리를 Git 저장소로 만들고 싶다면 해당 디렉터리로 이동하여 git init 명령을 실행한다.$ git initInitialized empty Git repository in C:/Users/CKIRUser/Desktop/test/.git/ 이 명령은 .git이라는 하위 디렉터리를 만든다..git 디렉터리에는 저장소에 필요한 뼈대 파일(skeleton)이 들어있다. 기존 저장소를 Clone 하기다른 프로젝트에 참여하려거나 Git저장소를 복사하고 싶다면 git clone [url] 명령을 사용한다.. 2024. 9. 30.
[Git] 도움말 보기 git help -a명령을 사용하면 git의 모든 명령어를 살펴볼 수 있다. 특정 도움말을 보기 위해서는 git 명령어 -h 를 사용한다.이는 명령어의 사용법과 옵션을 조회한다. $ git add -husage: git add [] [--] ...    -n, --[no-]dry-run    dry run    -v, --[no-]verbose    be verbose    -i, --[no-]interactive                          interactive picking    -p, --[no-]patch      select hunks interactively    -e, --[no-]edit       edit current diff and apply    -f, --[no-].. 2024. 9. 30.
[Git] 최초 설정 Git을 설치하고 나면 Git의 사용환경을 적절히 설정해야 한다.설정을 한 번만 하면 Git을 업그레이드해도 유지된다.git config라는 도구로 설정 내용을 확인하고 변경할 수 있다.git은 이 설정에 따라 동작한다. 이때 사용하는 설정파일은 3가지다./etc/gitconfig 파일시스템의 모든 사용자와 모든 저장소에 적용되는 설정git config --system 옵션으로 이 파일을 읽고 쓸 수 있다.~/.gitconfig, ~/.config/git/config 파일특정 사용자에게만 적용되는 설정git config --global옵션으로 이 파일을 읽고 쓸 수 있다..git/config 파일Git 디렉터리에 있고 특정 저장소(혹은 현재 작업중인 프로젝트)에만 적용되는 설정각 설정은 역순으로 우선시된.. 2024. 9. 30.
[Git] 파일의 상태 Git은 파일을 3가지 상태로 관리한다.Commitedlocal DB에 안전하게 저장되었다는것을 의미Modified수정한 파일을 아직 local DB에 커밋하지 않았음을 의미Staged현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태 이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결되어 있다.Git DirectoryGit이 프로젝트의 메타 데이터와 객체 DB를 저장하는곳Working Directory프로젝트의 특정 버전을 Checkout한 것Staging AreaStaging Area는 Git Directory에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장함 Git이 하는 일은 기본적으로 아래와 같다.Git이 하는 일1. Working Directory에서 파일을 수정2. Sta.. 2024. 9. 30.
[Git] Git 기초 차이가 아니라 스냅샷subversion과 이와 비슷한 VCS들과 Git의 가장 큰 차이는 데이터를 다루는 방법이다.큰 틀에서 보면 VCS대부분은 관리하는 정보가 파일의 목록이다.CSV, Subversion 등의 시스템은 각 파일의 변화를 시간순으로 관리하여 파일의 집합을 관리한다.Git은 이런 방법으로 데이터를 저장, 취급하지 않는다.Git은 데이터를 파일 시스템, 스냅샷으로 취급하고 크기가 매우 작다.Git은 커밋하거나 프로젝트의 상태를 저장할 때마다 파일이 존재하는 그 순간을 중요하게 여긴다.파일이 달라지지 않았다면 성능을 위해 파일을 새로 저장하지 않는다 대신 이전 상태의 파일에 대한 링크만 저장한다.  이것이 Git이 다른 VCS와 구분되는 점이다. 거의 모든 명령을 로컬에서 실행거의 모든 명령이.. 2024. 9. 28.
[MySQL] 기본 명령어 명령어사용법데이터베이스 생성CREATE DATABASE database_name;데이터베이스 삭제DROP DATABASE database_name;데이터베이스 선택USE database_name;데이터베이스 목록SHOW DATABASES;테이블 생성CREATE TABLE table_name (column1 datatype1, column2 datatype2, ...);테이블 변경ALTER TABLE table_name ADD column_name datatype;테이블 삭제DROP TABLE table_name;테이블 구조 보기DESCRIBE table_name;테이블 목록 보기SHOW TABLES;데이터 조회SELECT * FROM table_name;데이터 삽입INSERT INTO table_name.. 2024. 9. 28.
[C#] 연산자 재정의 class OPClass{ public int a = 0; public static bool operator ==(OPClass c1, OPClass c2) { return c1.a == c2.a; }}연산자 오버로딩의 조건1. public2. static반환 타입은 자유 2024. 9. 28.
[C#] Thread(3) 스레드 동기화 멀티 스레드의 문제스레드의 수가 많아질수록 관리가 어렵고 더 많은 문제가 발생하게 된다.여러 개의 스레드가 하나의 자원을 공유하기 때문이다. 스레드가 자신의 내부에서만 자원을 사용한다면 문제가 되지 않는다. 하지만 여러 개의 스레드가 동시에 하나의 자원을 사용하려 한다면 병목현상이 나타난다. 또한 하나의 스레드가 자원을 독점하고 있다면 나머지 스레드는 무한히 대기해야 하는 데드락 현상이 발생할 수 있다. 동기화동기화란 여러 곳에서 자원을 요청했을 때 순차적으로 사용한다는 개념이다.1개의 데이터를 여러 스레드가 공유할 때 특정스레드가 어떤 자원을 사용하게 되면 나머지 스레드가 접근할 수 없도록 lock을 걸고 사용이 끝나면 lock을 해제하여 다른 스레드가 접근할 수 있도록 한다. 동기화를 하는 대표적인 .. 2024. 9. 28.
[C#] Thread(2) 스레드의 상태 스레드의 상태스레드는 크게 생성직후(Unstarted), 실행가능(Runnable), 대기(Suspended), 종료(Stopped) 4가지 상태로 나눌 수 있다. 1.생성직후(Unstarted) 상태스레드가 막 생성된 상태로 이상태에서 스레드의 Start() 메소드가 호출되면 실행가능 상태가 되고, 해당 스레드의 메소드가 종료되면 바로 종료상태가 된다. 2. 실행가능(Runnable) 상태실행가능 상태의 스레드들은 큐에 저장한 후 CLR(공용 언어 런타임)에서 관리한다. CPU는 한번에 하나의 스레드만을 실행 할 수 있기 때문에 하나의 스레드만 실행되고, 나머지 스레드 들은 대기하고 있다. 이 2가지 경우의 스레드를 모두를 실행가능 상태라고 말한다. 3. 대기(Suspended) 상태실행중인 스레드를 .. 2024. 9. 28.
반응형