목록2026/04 (28)
I'm FanJae.
1. 문제 링크https://codeup.kr/problem.php?id=4701 코드업코드업은 프로그래밍을 배우고 싶은 사람들을 위한 온라인 학습 플랫폼입니다.codeup.kr 2. 문제 풀이모든 두 용액의 조합을 확인하면 O(N^2)이 걸린다.N은 최대 100,000이므로, 전체 조합을 직접 확인하는 방식은 사용할 수 없다. 따라서 용액의 특성값을 오름차순으로 정렬한 뒤, 가장 작은 값과 가장 큰 값에 각각 포인터를 둔다.두 값의 합이 0보다 작으면 합을 줄이기 위해 오른쪽 포인터를 왼쪽으로 이동한다. 각 단계마다 현재 합을 보고 정답을 갱신할지 판단한다. 3. 아이디어1. 정렬된 배열에서는 왼쪽 포인터를 오른쪽으로 이동하면 선택되는 값이 커진다.2. 오른쪽 포인터를 이동하면 선택되는 값이 작아..
1. 얕은 복사 / Shallow Copy- 배열이나 클래스와 같은 것을 복사할 경우, 위에서 다룬 것처럼 객체의 참조를 복사한다.int [] a = {1,2,3};int [] b = a; - 이처럼, 객체의 참조만 복사하는 것을 얕은 복사라고 한다.- C++ 의 경우 포인터를 소유하고 있을 때, 복사 생성자나 대입 연산자를 제대로 만들지 않을 경우, 포인터의 이중 해제(Dangling Pointer) 관련 문제가 있지만, C# 의 경우 GC(Garbage Collector)가 이를 관리하기 때문에 값을 공유하는 문제만 신경을 써도 괜찮아 보인다.2. 깊은 복사 / Shallow Copy- 일반적인 값 형식 자료형은 대입 시 값 자체가 복사된다. 따라서 내부에 참조형 필드가 없는 경우,에는 깊은 복사와 ..
1. 클래스(Class) 1) 클래스의 정의- 클래스는 상태(데이터)와 동작(기능)을 하나로 묶어 표현할 수 있는 참조 형식이다.- 객체지향 프로그래밍에서는 클래스를 이용해서 객체를 만들 수 있다.- 클래스는 객체를 만들기 위한 설계도라고 할 수 있다.- 클래스는 참조 형식으로, 변수에는 객체 자체가 들어있는 것이 아닌 객체가 있는 메모리 주소를 참조하는 참조값이 들어있는 형태다.2) 클래스의 기본 형태class 클래스이름{ // 필드 접근 제한자 데이터형 변수이름; // private int value; // 생성자(생략 가능) public 클래스이름() { } // 메서드 반환형 메서드이름() // public add(int a, int b) { }}- 위와 같은 형태..
1. 문제 링크https://codeup.kr/problem.php?id=3733 코드업코드업은 프로그래밍을 배우고 싶은 사람들을 위한 온라인 학습 플랫폼입니다.codeup.kr 2. 문제 풀이1 지나온 경로에 대한 계산을 위해 재귀 탐색을 진행하였고, 메모이제이션으로 값을 계산해두어 연산 횟수를 줄였다.3. 아이디어1. 이 문제의 핵심은 각 시작 수마다 1까지 직접 계산하면 중복 연산이 많이 발생한다는 점이다.2. 따라서 어떤 수 n에서 1까지 도달하는 수열의 길이 length[n]을 저장해둔다.3. 연산 과정에서 같은 n을 다시 만나면 저장된 값을 재사용한다.4. 단, 수열을 앞에서부터 진행하는 동안에는 중간값의 length가 아직 확정되지 않는다. 4-1. 반복문으로 구현한다면 지나온 경로를 ..
1. 값 형식과 참조 형식1) 구조체- 구조체는 값 형식이다.- 구조체 변수를 다른 변수에 대입하면 값이 복사된다.- 따라서 복사본을 수정해도 원본에는 영향을 주지 않는다.2) 클래스- 클래스는 참조 형식이다.- 클래스 변수를 다른 변수에 대입하면 객체 자체가 복사가 되는 것이 아니라, 객체를 가리키는 참조가 복사된다.- 따라서, 두 변수가 같은 객체를 가리키는 경우, 한쪽에서 객체의 값을 변경하면 다른 쪽에서도 변경된 값이 보이는 특징이 있다3. 사용 예시struct StructPlayer{ public int hp;}class ClassPlayer{ public int hp;}static void Main(string[] args){ StructPlayer s1; s1.hp = 50; ..
1. string1) string- 문자열을 저장하는 참조형(Reference Type) 클래스다.- 사용 방식은 값 형식처럼 동작하게 설계되어 있다.- 실제 구현은 System.String 클래스이며, 내부적으로는 char 배열 기반의 불변 객체이다.2) string의 불변성① 특징- 한 번 생성된 문자열은 수정이 불가능하다.- 문자열 변경처럼 보이는 연산은 기존 string 객체를 수정하는 것이 아니라, 다른 string 객체를 참조하게 된다.string str = "abc";str = str + "123";// "abc" 문자열 리터럴에 해당하는 string 객체는 관리 힙에 존재한다.// str은 그 객체를 참조한다.// str + "123" 연산은 기존 "abc" 객체를 수정하지 않는다.// 런..
[멀티 스레드 시리즈 글][Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)[Multi Thread] 2. 호출 스택과 실행 흐름[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)1. 멀티스레드를 사용하는 이유와 주의점- 멀티 스레드는 성능을 개선하기 위한 대표적인 기법이다.- 하지만 모든 상황에서 좋은 결과를 보장하는 것은 아니며, 적절한지 정리할 필요가 있다. 1) I/O 대기 시간 숨기기(Latency Hiding)- CPU가 아니라 ..
1. 메서드(Method)1) 함수(Function)와 메서드(Method)의 공통점- 함수와 메서드는 둘다 입력 값을 받아 특정 작업을 수행하고 결과를 내는 코드의 집합이다.int Add(int a, int b){ return a + b;}- 함수와 메서드는 둘다 아래와 같은 공통적인 특징을 가진다.- 매개 변수(Parameter)를 받을 수 있다.- 반환값(Return Value)을 가질 수 있다.- 호출하면 내부의 코드가 실행된다.- 함수 오버로딩(Function Overloading)이 가능하다.- 두 개 모두, 재사용성과 코드 분리를 위해 사용한다. ※ 결국, 위에서 보았던 코드만 보고 함수인가? 메서드인가? 구분할 수 없다. 2) 함수(Function)와 메서드(Method)의 차이점① ..
1. 값 형식(Value Type)과 참조 형식(Reference Type)※ 핵심적인 차이는 아래와 같다고 생각한다.변수가 값을 직접 들고 있는가? 아니면 객체를 가리키는 참조를 들고 있는가? - 변수가 값을 직접 들고 있다면 값 형식(Value Type)이다.- 변수가 객체를 가리키는 참조를 들고있다면 참조 형식(Reference Type)이다.1) 값 형식- 값 형식은 변수 안에 데이터 자체가 들어가는 타입이다.- 일반적인 정수, 실수, 문자 변수, 구조체, 열거형이 이에 해당한다. ① 값 형식의 특징int a = 10;int b = a;b = 20;- 값 형식의 변수는 값 자체, 즉 해당 타입의 실제 데이터를 가지고 있다.- 따라서 값 형식 변수를 다른 변수에 대입하면 원본을 공유하는 것이 아닌 ..
※ C++과 내용상 겹치는 부분은 제외하고, 다루지 않았던 내용을 중심으로 다뤘다. 1. C++과 C#의 차이1) 언어 성격 비교① C++- 저수준의 제어 기능- 성능 및 최적화에 유리- 메모리 직접 관리② C#- 런타임(.NET)에 의존- 생산성과 안정성 중심- 메모리 자동 관리 2) 메모리 관리// C++int *p = new int; // 메모리 할당delete p; // 메모리 해제- C++은 개발자가 직접 메모리를 관리한다.// C#class Player{ public int hp;}void Func(){ Player = new Player(); // 별도 해제 코드가 없음}- 반면, C#은 Garbage Collector(GC)가 이를 자동으로 관리해준다.- 사용하지 않..