전체 글256 [면접 준비][자료구조] 스택과 큐의 차이점 1. 스택(Stack) - 나중에 들어간 것이 먼저 나오는 후입선출의 구조이다.(LIFO) - 비어있는 스택에서 원소를 추출하면 stack underflow - 스택이 넘치는 경우 stack overflow - ex) 뒤로가기, 실행취소, 역순 문자열 만들기 등 2. 큐(Queue) - 먼저 들어간 것이 먼저 나오는 선입선출의 구조(FIFO) - 한쪽 끝에서는 삽입 작업이, 다른 쪽 끝에서는 삭제 작업이 양쪽으로 이루어짐 - ex) 줄을 서서 기다려야하는 모든 행동들, 프로세스 관리, 너비우선탐색(BFS) 등 스택은 나중에 들어간 것이 먼저 나오는 후입선출, LIFO의 구조이고, 큐는 먼저 들어간 것이 먼저 나오는 선입선출, FIFO의 구조입니다. 스택의 예시로는 실행취소 등이 있고, 큐의 예시로는 줄을.. 2023. 7. 22. [백준 10816번] 숫자 카드 2 - unordered_map #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { // 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; unordered_map SG; // 상근이의 카드더미 for (int i = 0; i > card; SG[card]++; // 카드 별로 갯수를 셈 } int M; cin >> M; .. 2023. 7. 22. [면접 준비][자료구조] 벡터, 리스트, 맵, 딕셔너리 1. 배열 - 스택에 생성되는 인덱스 기반의 기본 자료구조 - 길이가 고정되어 있음 - 메모리의 효율성이 높음 - 원소에 직접 접근하는 것이 쉬움 - 원소를 중간에 추가하거나 삭제하는 것은 어려움 2. 벡터 - 힙에 생성되어 메모리에 동적으로 할당되는 iterator 기반 컨테이너 - 배열과 같이 연속적인 메모리 값에 할당되고 특정 원소에 접근하기 쉬움 - 속도 면에서는 배열에 비해 성능이 떨어지지만 자료를 효율적으로 관리할 수 있고, 예외처리가 쉬움 - 배열과 마찬가지로 원소를 중간에 추가하거나 삭제하는 것은 어려움 3. 리스트 - 비연속적인 메모리 값을 가짐 - 포인터로 연결되어 연결리스트라고 불림 - 각 원소의 추가 및 제거가 빠르고 쉬움 - 원소에 직접 접근하는 것은 불가능하고 처음이나 끝부터 차.. 2023. 7. 21. [백준 1620번][C++] 나는야 포켓몬 마스터 이다솜 #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { // 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌 ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M; cin >> N >> M; map book1; // 도감1 -> 번호로 이름찾기 map book2; // 도감2 -> 이름으로 번호찾기 for (int num = 1; num > name; book1.insert({ num,name }); book2.insert({ name,num }); .. 2023. 7. 21. [백준 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. 이전 1 ··· 17 18 19 20 21 22 다음