본문 바로가기

분류 전체보기252

[백준 2750번][C++] 수 정렬하기 - 8. 기수 정렬 #include #include #include #include #include #include #include #include #include #include using namespace std; void RadixSort(vector& v, int maxRadix, int firstIndex) { // maxRadix는 [최대 자릿수 + 1] 이므로 그 이전까지만 반복을 진행 for (int i = 1; i 104, 103은 1번, 555는 5번, 777은 7번 // 0번 인덱스는 해당 자릿수의 값이 없는 경우 // ex) 100의 자릿수 검사 -> 1,.. 2023. 7. 21.
[면접 준비][C#] 제네릭(Generic) 1. 제네릭(Generic)이란? - 데이터 형식을 일반화하여 사용이 가능하게 한 형식 매개변수(Type parameter)이다. - 박싱/언박싱(강제 형번환)이 일어나지 않도록 타입을 미리 지정하는 방식이다. 2. 제네릭의 장점 - 지정된 타입과 호환하는 타입에 대해서만 사용할 수 있게하고, 그렇지 않은 경우 컴파일 에러를 발생시켜 타입에 대한 안정성이 높다. - 런타임 시 데이터 형식이 결정 되는 것이 아닌 코드에서 호출할 때 데이터 형식이 결정되므로 성능 저하가 없다. - 또한 Object 타입을 이용해 값 타입을 사용한 경우 박싱이나 언박싱이 일어나는데 제네릭을 사용하면 값 타입의 인스턴스 자체를 값 자체로 전달할 수 있어 박싱이 수행되지 않아 성능이 더 좋다. - 컴파일러가 형변환을 해주기 때문.. 2023. 7. 20.
[면접 준비][C#] 박싱(boxing)과 언박싱(unboxing)의 차이점 1. 박싱(boxing) - 값 형식(value types)을 참조 형식(reference types)으로 변환 해주는 것 2. 언박싱(boxing) - 박싱했던 값을 다시 원상태로 복귀 시키는 것 - 즉, 참조 형식을 값 형식으로 변환 해주는 것 3. object 타입 - 박싱과 언박싱이 가능한 이유 - 모든 타입의 부모 객체 -> 모든 타입이 object로 변환이 가능함 - object 타입이 참조 형식이기 때문에 임의의 타입을 object형으로 형변환 하는것을 박싱이라 한다. - 반대로, object형에서 다시 원상태로 복귀 시키는 것을 언박싱이라 한다. 4. 박싱 언박싱을 사용하는 이유 - 만약 int형으로 배열을 선언한다면 int형 외에 string형 등의 참조형은 배열에 넣을 수 없지만, ob.. 2023. 7. 20.
[면접 준비][C#] class와 struct의 차이점 1. struct(구조체) [C#] - 값 형식 -> 복사(call by value) - 스택에 할당 -> GC사용x -> 프로그램 속도 향상에 도움 - 자주 사용하지 않고 인스턴스 크기가 16바이트 미만인 경우에 사용 - protect 선언 불가 , 상속 불가 [C++] - 기본값이 public 2. class(클래스) [C#] - 참조 형식 -> 주소(call by reference) - 힙에 할당됨 -> 삭제시 GC사용 -> 프로그램 속도 저하 - 변수나 함수 등이 자주 사용될 경우에는 참조로 접근하는 것이 좋음 - protect 선언 가능, 상속 가능 [C++] - 기본값이 private C#에서 구조체는 값 형식인 call by value 형태로 값이 복사되어 전달되고, 클래스는 참조 형식인 c.. 2023. 7. 20.
[면접 준비] Call by Value와 Call by reference의 차이점 1. call by value(값에 의한 호출) - 인자로 받는 값을 복사하여 처리한다. - 복사하여 처리하기 때문에 안전하고 원래 값이 보존된다. - 복사를 하기 때문에 메모리 사용량이 늘어난다. 2. call by reference(참조에 의한 호출) - 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. - 복사를 하지않고 직접 참조를 하기에 빠르다. - 직접 참조를 하기에 원래 값이 영향을 받는다. call by value는 인자로 받는 값을 복사하여 처리하는 값에 의한 호출이고, call by reference는 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 참조에 의한 호출입니다. call by value는 복사하여 값을 처리하기에 원래 값이 보존되어 안전하지만 복사를 하기에.. 2023. 7. 20.
[백준 2705번][C++] 수 정렬하기 - 7. 쉘 정렬 #include #include #include #include #include #include #include #include #include #include using namespace std; void SkipInsertionSort(vector& v, int start, int skipNum) { // 숫자를 건너뛰는 삽입정렬 for (int i = start + skipNum; i = 0; j -= skipNum) { if (v[j] > originNum) { // 앞의 숫자가 더 큰 경우 v[j + skipNum] =.. 2023. 7. 20.
[백준 7785번][C++] 회사에 있는 사람 #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { int n; cin >> n; map entry; for (int i = 0; i > name >> record; if (record == "enter") { // 들어온 경우 entry.insert({ name, true }); } else { // 나간 경우 -> 아예 삭제 entry.erase(name); } } for (map::iterator iter = entry.begin(); iter != entry.en.. 2023. 7. 20.
[C++] 문자열 리터럴 #include using namespace std; int main() { char str[] = "hello"; // 1번 const char *pstr = "eee"; // 2번 // char *pstr = "eee"; -> 안됨 str[3] = 'k'; // pstr[3] = 'k'; -> 안됨 cout 2023. 7. 19.
[C++] 메모리 구조 1. Text 영역(Code 영역) - 작성한 코드들이 컴파일 이후 기계어로 번역되어 저장되어 있는 공간 - 프로그램이 끝날때까지 메모리에 남아있음 - 읽기 전용 공간 2. Rodata 영역 - Read Only data, 즉 읽기 전용 data들이 저장되는 공간 - const 변수, 문자열 상수, printf의 중괄호 부분이 주로 들어감 3. Data 영역 - 전역 변수, 전역 배열, 전역 구조체 등을 저장하는 공간 - 정적 변수(static)도 저장 - 초기화 한 이후의 전역변수를 저장 4. Bss 영역 - Data와 매우 비슷 - 전역 변수(배열, 구조체 포함), 정적 변수 저장 - 초기화 이전의 전역변수를 저장(차이점) cf) 전역변수들은 main이 실행되기 전에 bss에 저장되며, bss 영역에.. 2023. 7. 19.
[백준 14425번][C++] 문자열 집합 #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { int result = 0; int N, M; cin >> N >> M; map map; for (int i = 0; i > s; map.insert({ s, true }); } for (int i = 0; i > s; if (map[s]) result++; } cout 2023. 7. 19.
[백준 2705번][C++] 수 정렬하기 - 6.병합 정렬 #include #include #include #include #include #include #include #include #include #include using namespace std; void Merge(vector& v, int left, int mid, int right) { int i = left; // 왼쪽 부분 시작지점 int j = mid + 1; // 오른쪽 부분 시작지점 int k = left; // 원소를 넣을 위치 vector sortedVec(v.size()); // 정렬된 벡터를 저장할 공간 // 왼쪽부분과 오른쪽 부분의 원소들을 하나씩 차례로 비교하여 더 작은 원소를 sortedVec에 넣음. // 왼쪽 부분과 오른쪽 부분은 이미 오름차순으로 정렬되어있는 상태이므로 .. 2023. 7. 19.
[백준 2750번][C++] 수 정렬하기 - 5. 삽입 정렬 #include #include #include #include #include #include #include #include #include #include using namespace std; void InsertionSort(vector& v) { for (int i = 1; i = 0; j--) { if (insertVal swap 아님 // -> 뒤의 원소에 앞의 원소의 값을 넣음 v[j + 1] = v[j]; insertIndex--; } else { /.. 2023. 7. 18.