본문 바로가기

반응형

전체 글

(174)
(C++) sort 커스터마이징 , STL vector 멤버 함수, 문자열 find 1. sort 함수 커스터마이징 bool comp(const type& A, const type& B); sort(vec.begin(), vec.end(), comp); sort(ary, ary + n, comp); // n은 ary 배열의 크기 sort 함수는 라이브러리에 있는 메소드로 벡터나 배열을 정렬할때 사용된다. 기본적인 사용 방법은 위와 같다. 여기서 comp 함수를 따로 정의해주면 정렬을 사용자 입맛대로 할 수 있다. comp 함수는 두 개의 매개변수를 가지는데, 타입은 string, struct, class, int 등 모두 사용 가능하다. 정렬되는 순서는 true가 되는 규칙을 따른다. 사실 이게 끝이다. 예를 들어보자. 매개변수 타입이 string이라고 가정해보자. 만약에 아래와 같다면..
[ 자료구조 ] 스택(Stack) 스택 (Stack) 스택은 후입선출(LIFO: Last-In First-Out)의 원리에 따라 삽입과 삭제를 수행하는 자료구조다. 스택을 직역하면 '무더기'라는 뜻인데 말그대로 무더기처럼 쌓아 올리고, 하나씩 제거한다. 여기서 데이터 삽입을 push라 하고, 데이터 삭제를 pop이라 한다. 굉장히 간단한 자료구조다. 스택은 후입선출 구조이기 때문에 가장 마지막에 들어온 데이터가 가장 먼저 나간다. 반대로 가장 먼저 들어온 데이터는 가장 마지막으로 나간다. 위 그림만 봐도 쉽게 이해할 수 있을 것이다. 이러한 자료구조가 왜 필요할까? 어떻게 활용할 수 있을까? 스택의 활용 예시로 두 가지만 살펴보자. 먼저 인터넷 브라우저에서 '뒤로가기' 기능을 예로 들 수 있다. 구현할 수 있는 방법은 많겠지만 스택을 사..
[ 백준 16113 ] 시그널 (C++) https://www.acmicpc.net/problem/16113 16113번: 시그널 zxcvber는 외계인을 연구하는 과학자다. 그는 지난 10년간 우주에서 오는 시그널를 연구했지만, 아무런 성과가 없었다. 그러던 어느 날, 갑자기 우주에서 이상한 시그널이 오기 시작했다. zxcvber는 www.acmicpc.net 단순 구현 문제. dfs로 약간 꼼수를 썼다. 0행만 탐색하면서 검은색 칸을 만나면 연속된 검은색 칸의 개수를 구해 경우의 수를 나눴다. 0~9 까지의 숫자는 몇 개의 칸을 칠하는지로 분류할 수 있다. 아래 그림을 참고하자. 5칸 → 1 7칸 → 7 9칸 → 4 11칸 → 2, 3, 5 12칸 → 0, 6, 9 13칸 → 8 모든 숫자는 0행부터 시작한다. 따라서 (0행, 0열)부터 (..
[ 자료구조 ] 연결 리스트 : 원형 연결 리스트 연결 리스트의 마지막! 원형 연결 리스트에 대해 알아보자. 구조, 구현할 기능, 구현 순서로 진행된다. 원형 연결 리스트 1. 구조 원형 연결 리스트는 단일 연결 리스트와 거의 똑같다. 단일 연결 리스트에서 tail의 포인터를 head 향하도록 하면 원형 연결 리스트가 된다. 시작과 끝을 가지고 있기 때문에 기준점 역할을 하는 노드가 필요한데, 이런 역할을 하는 노드를 'cursor'라고 부른다. back은 cursor의 원소, front는 cursor->next의 원소다. 2. 클래스 정의 노드 클래스 (CNode) class CNode{ private: string elem; // 노드 원소값 CNode* next; // 다음 노드 friend class CircleList; }; 연결 리스트 클래스..
[ 자료구조 ] 연결 리스트 : 이중 연결 리스트 저번 글에 이어서 이중 연결 리스트와 순환 연결 리스트를 구현해보자. 저번 글과 마찬가지로 그림으로 구조를 먼저 살표보고, 어떤 기능을 구현할지 명시하고, 세부적인 기능을 구현한다. 이중 연결 리스트 1. 구조 각 노드는 데이터와 두 개의 포인터를 가지고 있다. next 포인터는 다음 노드를, prev 포인터는 이전 노드를 가리킨다. 따라서 단일 연결 리스트와는 다르게 양방향으로 이동할 수 있는 특징이 있다. 프로그래밍을 단순화하기 위해 양 끝에 더미 노드를 추가하는 것이 좋다. header 노드는 시작점을 의미하고, trailer 노드는 끝점을 의미한다. 이중 연결 리스트는 양방향으로 움직일 수 있는 장점이 있지만 그만큼 구현하기 위해 추가되는 요소들도 많다. 당장 단일 연결 리스트와 비교해봤을 때 구..
[ 자료구조 ] 연결 리스트(Linked List) : 단일 연결 리스트 연결 리스트를 배우기 전에 왜 배우는지를 먼저 알고 가자. 결론부터 말하면 연결 리스트는 배열의 단점을 극복하기 위해 나온 자료구조다. 배열의 장단점에는 무엇이 있는지 먼저 알아보고, 연결 리스트의 가장 단순한 구조인 '단일 연결 리스트'를 구현하는게 오늘의 학습목표다. 배열의 특징, 연결리스트 구조 배열은 인덱스를 통해 데이터에 직접적인 접근이 가능하기 때문에 접근이 아주 빠르다는 장점이 있다. 그러나 배열 내의 데이터 이동 및 재구성이 굉장히 힘들다. 배열에서 원소를 하나 삭제하려면 그 뒤에 있는 원소들을 전부 한 칸씩 당겨야 하고, 원소를 삽입하려면 그 뒤에 있는 원소들을 전부 한 칸씩 밀어야 한다. 또한 배열의 크기는 초기에 설정하면 이후에 변경 불가능하다. 초기에 설정한 크기를 넘어가면 데이터 ..
[ 자료구조 ] 템플릿, 예외처리 템플릿 공식문서에 따르면, '템플릿은 사용자가 템플릿 매개 변수에 대해 제공하는 인수에 따라 컴파일 시간에 일반 형식 또는 함수를 생성하는 구문' 이라고 나와있다. 그냥 변수 타입이 컴파일 시간에 결정된다고 이해하면 될 것 같다. 사실 우리는 템플릿을 자주 사용해왔다. C++에서 제공하는 백터나 큐, 스택을 사용할때 안에 변수 타입을 적었을 것이다. 이게 바로 템플릿이다. 템플릿은 함수와 클래스에 모두 적용 가능하다. 기본 형식은 아래와 같다. template // 함수 또는 클래스 정의 T는 모든 타입을 포함하는 대단한 녀석이다. 당연히 T 말고 다른 문자를 써도 된다. 먼저 함수 템플릿을 살펴보자. // 함수 템플릿 // 벡터 안에 있는 모든 값의 합을 반환 template T sum(const ve..
[ 자료구조 ] 상속, 보호 타입, 다형성, 추상클래스 오늘은 클래스에서 굉장히 중요한 상속에 대해 자세히 다뤄볼 생각이다. 바로 가보자. 상속이란? 상속이란 말 그대로 물려받는다는 의미다. 여기서 상속해주는 클래스를 부모 클래스, 기본 클래스, 슈퍼 클래스라 부르고 상속받는 클래스를 유도된 클래스, 자식클래스, 서브클래스로 부른다. 자식 클래스는 부모의 멤버를 사용 가능하다. 초간단 예시를 하나 살펴보자. // 부모 class Base { public: // Base type void f() { cout

반응형