본문 바로가기

전체 글69

[C++] - namespace와 using 사용법 (std:: 생략하기) 1. namespace란? namespace란, 클래스, 상수, 변수, 함수, 구조체 등의 이름이 중복되어 컴파일 시 오류가 생기는 것을 방지하기 위해 도입된 개념이다. (예를 들어 하나의 프로그램을 여러 개발자가 개발하는 경우, A 개발자가 덧셈 기능을 수행하는 number()라는 이름의 함수를 구현했다고 하자. 그리고 B 개발자는 같은 이름의 number() 함수이지만, 뺄셈 기능을 수행하도록 작성하였다고 하자. A 개발자와 B 개발자가 작성한 소스를 합쳐서 컴파일하거나 두 개발자의 소스를 링크시킬 경우 number 함수가 어떤 기능을 수행하는지 알 수 없어 오류가 발생하게 된다. ) namespace abc{//abc라는 이름공간 생성 ... } namespace를 생성하는 방법은 위와 같다. 생성.. 2023. 12. 12.
[자료구조] - 원형큐의 구조와 구현 1. 선형큐의 문제점 앞서 포스팅한 큐 설명 글에서 선형큐에 대한 문제점을 잠깐 언급하였다. 선형큐를 1차원 배열을 이용하여 구현할 경우, front와 rear의 값이 계속 증가만 하므로 언젠가는 배열의 끝에 도달하게 되어 비효율적이다. 이러한 문제는 큐를 구현하는 배열을 선형 말고 원형으로 두면 쉽게 해결할 수 있다. 원형큐의 구조와 구현 방법을 지금부터 알아보자. 2. 원형큐의 구조 원형큐도 선형큐와 마찬가지로 1차원 배열로 구현하는데, front와 rear가 증가만 하는 선형큐와 달리, 원형큐는 front와 rear의 값이 배열의 끝 값인 MAX-1 에 도달하면 그 다음값은 다시 0이 된다. 원형큐에서 front와 rear의 초기값은 둘 다 0이다. front가 큐의 첫번째 요소의 하나 앞을, re.. 2023. 12. 10.
[자료구조] - 큐(queue)의 구조, 선형큐 구현하기 1. 큐(queue)란? 큐(queue)라는 단어의 사전적인 뜻을 찾아보면, " (무엇을 기다리는 사람·자동차 등의) 줄" 이다. 계산을 기다리는 사람들의 줄을 생각하면 이해가 쉽다. 선입선출 (FIFO : First - In - First - Out) 스택과 비교되는 큐의 중요한 특징이다. 스택에서는 가장 마지막에 들어온 데이터가 가장 먼저 나가는 후입선출(LIFO)의 특징을 가졌다면, 큐는 이와 반대로 먼저 들어온 데이터가 먼저 나가는 구조이다. 즉 큐에서 입력은 뒤쪽에서만 일어나며, 출력은 앞쪽에서만 일어난다. 큐에서 삽입이 일어나는 뒤쪽을 rear(후단), 삭제가 일어나는 앞쪽을 front(전단) 이라고 한다. 2. 선형큐 구현하기 큐도 스택과 같이 1차원 배열로 구현이 가능하다. (물론 다른 방.. 2023. 12. 9.
[C++] - 1차원, 2차원 배열 동적 할당 1차원 배열 동적 할당 C++에서 배열을 할당할 때에는 new와 delete 연산자를 사용한다. new 연산자는 사용자가 원하는 크기만큼의 배열을 할당받아 그 주소를 리턴한다. (따라서 포인터 변수를 사용해야 한다.) 예를 들어, 정수 num을 입력받아서 num만큼 저장할 수 있는 정수형 배열을 선언해보자. int num; cin >> num; //크기가 num인 정수형 배열 동적 할당 int *score = new int[n]; ... //배열 사용이 끝난 후 배열 메모리 반환 delete []score; 2차원 배열 동적 할당 그렇다면 배열이 2차원일때 동적 할당을 하려면 어떻게 해야 할까? 가장 일반적인 방법은, 이중 포인터를 사용하는 방법이다. 이중 포인터 변수를 선언하여 행 개수만큼 먼저 동적 .. 2023. 12. 8.
[C++] - 동적 메모리 할당 1. 정적 메모리 vs 동적 메모리 배열에 대해 처음 배울때, int arr[10], char word[20] 과 같이 보통 배열의 크기를 미리 정해놓고 선언한다. 이처럼 프로그램을 실행하기 전, 미리 정해진 크기의 메모리를 할당받는 것을 정적 메모리 할당이라고 한다. 정적으로 메모리를 할당하게 되면 아주 간단한 방법으로 배열 선언이 가능하다는 장점이 있지만, 할당한 크기 이상으로는 사용이 불가능하며, 공간 낭비를 초래할 수 있어 비효율적이기도 하다. (예를 들어, 100개의 이름을 저장할 수 있는 배열을 선언하고 실제로는 20명의 이름만 저장한다면, 나머지 80개만큼의 공간이 낭비되게 된다.) 다른 방법으로는 동적 메모리 할당이 있다. 프로그램 실행 도중에 필요한 만큼의 메모리를 할당받고, 사용이 끝나.. 2023. 12. 7.
[백준] - 스택 기본(C++) 10828번 스택 / 28278번 스택2 / 10773번 제로 스택을 기본적인 성질을 이해하고 구현할 수 있다면, 쉽게 해결할 수 있는 백준 문제 3가지를 가져와 보았다. 스택에 대한 설명은 아래 글에서 자세히 적어놓았다. https://developer-cat.tistory.com/4 [자료구조] - 스택(Stack)의 구조와 구현 1. 스택(Stack)이란? 스택(stack)이란 단어의 사전적인 뜻은, "쌓아놓은 더미"이다. 쌓아놓은 접시들을 생각하면 이해가 쉬울 것이다. 후입선출 (LIFO : Last - In - First - Out) 스택의 중요한 특징이다. 앞 developer-cat.tistory.com 10828번: 스택 https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ .. 2023. 12. 5.