[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. [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. [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. [C#] Thread(1) 스레드의 개념 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위로 하나의 프로세스는 여러 개의 스레드가 독립적으로 실행될 수 있다.도로가 프로세스라면 스레드는 차선 System.Threading namespace주요 기능내용Interlocked멀티스레드 기반에서 스레드 간에 공윧되는 객체를 동기화한다.Monitorlocks, wait, signals를 통해서 스레드 객체를 동기화 한다.Mutex2개 이상의 스레드가 공유자원에 동시에 접근할 때 동기화한다.Thread스레드를 생성, 제어하는 기능을 제공한다.ThreadPool해당 프로세스내의 스레드를 관리하는 기능을 제공한다.Timer설정한 시간 간격으로 메소드를 실행하도록 기능을 제공한다.ThreadStart스레드에서 실행되는 메소드를 등록하는 델리게이트이다.Wait.. 2024. 9. 28. [Computer Science] 프로세스(Process) 메모리에 올라와 실행되고 있는 프로그램의 인스턴스Word.exe라는 프로그램이 있다면 이 프로그램을 실행한 것이 프로세스 여러 프로세스를 함께 돌리는 작업은 동시적, 병렬적 혹은 이 둘의 혼합으로 이루어짐 동시성하나의 프로세서가 여러 작업을 돌아가며 수행ABC라는 작업이 있다면 A 조금하고 B 조금 하고 C조금하고.... 이렇게 돌아가며 일부분씩 진행한다.이렇게 진행중인 작업을 바꾸는 것을 ContextSwitching이라고 함 이 과정이 매우 빠르기 때문에 동시에 작업이 진행되는 것처럼 보임 병렬성프로세서 하나에 여러 코어가 달려 각각 동시에 작업들을 수행듀얼코어, 쿼드코어, 옥타코어와 같은 명칭이 붙는 멀티코어 프로세서가 달린 컴퓨터에서 사용할 수 있는 방법 2024. 9. 28. [C#] event event는 class내에 특정한 이벤트가 일어났음을 외부의 이벤트 가입자들에게 알려주는 기능을 한다. 이벤트 선언 형식접근 지정자 event 델리게이트 이름; event는 delegate와는 달리 할당연산자( = )를 사용할 수 없으며, 오직 이벤트 핸들러 추가 ( += ) 혹은 기존 이벤트 핸들러 삭제( -= )만을 할 수 있다. 또한 delegate와 달리 해당 클래스 외부에서는 직접 이벤트를 호출할 수 없다. EventHandler 델리게이트를 사용한 이벤트 처리c#에서는 이벤트를 처리하기 위한 권장 이벤트 처리기(EventHandler 델리게이트)가 제공이 된다.내부 라이브러리에 선언되어 있는 EventHandler는 다음과 같다.public delegate void EventHandler(ob.. 2024. 9. 28. [C#] Types Value TypeReference Types메모리를 가리키는 방식메모리를 직접 가리킴메모리를 가리키는 참조를 통해 가리킴해당하는 형식intfloatenumboolstructclassobjectarraystring복사 방식Value Type끼리 할당 할 때 값을 그대로 복사Reference Type끼리 할당할 때 참조값만을 복사메모리 생성변수 생성과 동시에 메모리 생성변수의 선언과 메모리 생성이 분리됨 2024. 9. 28. [C#] const보다는 readonly가 좋다 -const ● 컴파일타임 상수. ● 컴파일타임에 변수가 값으로 대체된다.const int a = 100;if(100 == a)때문에 위의 코드는 아래와 정확히 동일한 IL코드로 컴파일된다.if(100 == 100) ● 내장된 숫자형, enum, 문자열, null에 대해서만 사용가능한 한계가 있다. -readonly ● 런타임 상수. ● 컴파일타임에 값으로 대체되는 것이 아닌 상수에 대한 참조로 컴파일된다. 때문에 메서드 내에서 선언이 불가능하다. ● 생성자에서 초기화될 수 있다. ● 어떤타입과도 함께 사용될 수 있다. ● 상수의 값이 런타임에 평가되어 동일클래스의 인스턴스라 하더라도 인스턴스별로 서로 다른 값을 가질 수 있다. readonly 대신 const를 사용하면 성능이 빠르다는 장점이 있지만.. 2024. 9. 28. [Design Patterns] 스트래티지 패턴 (strategy pattern) 스트래티지 패턴에서는● 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.● 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.디자인 원칙 1애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.바뀌는 부분을 캡슐화하면 바뀌지 않는 부분에 영향을 미치지 않고 그 부분만 고치거나 확장할 수 있다. 디자인 원칙 2구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.Duck의 행동을 DuckClass에서 구현하거나 서브클래스에서 구현하는 것이 아닌 인터페이스로 표현된 행동을 사용하게 된다. 따라서 Duck의 행동을 구현한 것은 Duck서브클래스에 국한되지 않는다. 디자인 원칙 3상속보다는 구성을 활용한다.행동을 상속받는 대.. 2024. 9. 28. [C#] Func 대리자 (지정된 형식의 값을 반환하는 대리자) namespace: System Func delegate는 Action과 유사하다.Action은 반환형식이 없는 경우 사용하는 반면 Func는 반환값이 필요할 때 사용한다. [Func 형식]Func 대리자의 오른쪽 끝(TResult)은 반환값의 타입이다. public delegate TResult Funcout TResult>();public delegate TResult Funcin T,out TResult>(T arg);public delegate TResult Funcin T1,in T2,out TResult>(T1 arg1, T2 arg2); . . .. 2024. 9. 28. [Algorithm] Boids boids는 생물의 집단행동(새 무리의 이동 등)을 시뮬레이션 하는 알고리즘이다. 기본적으로 3개의 규칙을 따른다.1. 응집(Cohesion): 주변 boid들과 평균위치를 향한다.2. 분리(Separation): 주변 boid들과 충돌하지 않도록 방향을 돌린다.3. 정렬(Alignment): 주변 boid들과 같은 방향을 향한다. 응집 - CohesionBoid는 주변의 Boid의 곁으로 가려는 성질이 있다.주변 Boid의 위치의 평균을 구해 해당 방향으로 향한다.Vector3 Cohesion(Transform[] _targets){ Vector3[] targets = Change(_targets, (Transform target) => target.position); return Avera.. 2024. 9. 28. [C#] 확장메서드 기존 코드의 변경 없이 기능을 확장시키는 기능 정적 클래스에서만 정의가 가능하며 확장 메서드의 첫 매개변수는 확장할 타입을 지정한다.//확장 메서드는 정적클래스에서만 정의가 가능하다.public static class ListExtensionMethods{ //확장메서드의 첫 매개변수는 타입을 지정한다. public static List RemoveBack(this List _list, int _count) { if (_count 2024. 9. 28. 이전 1 다음 반응형