C++

    Effective C++ 공부 (항목 11 ~ 15)

    Effective C++ 요약 (항목 11~15)항목 11: operator=에서는 자기 대입에 대한 처리를 빠뜨리지 말자문제점arr[i] = arr[j];*px = *py;위 연산들에는 자기 대입(self-assignment)의 가능성이 있음.단순히 delete 후 new로 처리할 경우 자기 대입 시 이미 지워진 데이터를 참조하게 될 수 있음.안전한 방법Widget& Widget::operator=(const Widget& rhs) { if (this == &rhs) return *this; Bitmap* pOrig = pb; pb = new Bitmap(*rhs.pb); // 복사 성공 시에만 교체 delete pOrig; return *this;}복사 먼저 → delet..

    Effective C++ 공부 (항목 6 ~ 10)

    Effective C++ 요약 (항목 6~10)항목 6: 컴파일러가 만들어주는 함수를 원치 않으면 명시적으로 금지하라컴파일러는 특별한 요청이 없어도 복사 생성자와 대입 연산자를 자동으로 생성한다. 하지만 어떤 객체는 복사되면 안 되는 경우가 있다.이럴 땐 다음처럼 private으로 선언하고 구현하지 않기:class A {private: A(const A&); A& operator=(const A&);};이러면 외부 복사가 불가능해진다. 만약 friend 함수가 사용하면 컴파일은 되지만 링커 오류 발생.현대적 방법 (C++11 이후):class A {public: A(const A&) = delete; A& operator=(const A&) = delete;};가독성, 유지보수성 증..

    Effective C++ 공부 (항목 1 ~ 5)

    Effective C++ 정리: 항목 1~5항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수C++는 단일 언어가 아니라 다중 패러다임의 결합입니다. 이를 이해하고 적절한 관점으로 접근해야 합니다.C++의 4가지 주요 관점C 스타일: 절차적 프로그래밍, 포인터, 메모리 직접 관리 등.객체지향 스타일: 클래스, 상속, 다형성 등.템플릿 스타일: 컴파일타임 제네릭, 타입 추론 등.STL 스타일: 컨테이너, 반복자, 알고리즘, 람다.➡️ 어떤 기능을 구현할 때 이 중 어떤 스타일이 적절한가를 고민하면서 코딩해야 함.항목 2: #define을 쓰거든 const, enum, inline을 떠올리자❌ #define의 문제점#define A 123단순 텍스트 치환 → 타입 정보 없음에러 시 디버깅 어려움 (에..

    1978번: 소수 찾기 (BOJ C++)

    1978번: 소수 찾기 사용 언어: C++ 풀이 아래의 코드는 O(n)이지만, O(루트n)에 코드를 짤 수 있다. 해당 숫자의 루트 n까지만 확인하면 된다는 사실을 사용하는 것이다. for(int i=2; i*i> num; bool flag; while(num--) { int isPrime; flag = true; cin >> isPrime; if(isPrime == 1) continue; for(int i=2; i

    1259번: 팰린드롬수 (BOJ C++)

    1259번: 팰린드롬수 사용 언어: C++ 풀이 #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(0); stack stack; while(1) { string a; cin >> a; if(a == "0") break; if(a.length() == 1) { cout

    2096번: 내려가기 (BOJ C++)

    2096번: 내려가기사용 언어: C++ 문제 N줄에 0 이상 9 이하의 숫자가 세 개씩 적혀 있다. 내려가기 게임을 하고 있는데, 이 게임은 첫 줄에서 시작해서 마지막 줄에서 끝나게 되는 놀이이다.먼저 처음에 적혀 있는 세 개의 숫자 중에서 하나를 골라서 시작하게 된다. 그리고 다음 줄로 내려가는데, 다음 줄로 내려갈 때에는 다음과 같은 제약 조건이 있다. 바로 아래의 수로 넘어가거나, 아니면 바로 아래의 수와 붙어 있는 수로만 이동할 수 있다는 것이다. 이 제약 조건을 그림으로 나타내어 보면 다음과 같다.별표는 현재 위치이고, 그 아랫 줄의 파란 동그라미는 원룡이가 다음 줄로 내려갈 수 있는 위치이며, 빨간 가위표는 원룡이가 내려갈 수 없는 위치가 된다. 숫자표가 주어져 있을 때, 얻을 수 있는 최대..

    1504번: 특정한 최단 경로 (BOJ C/C++)

    1504번: 특정한 최단 경로 사용 언어: C++ 풀이 //1번 정점에서 시작, n번 정점으로 이동. //시작 정점이 주어지고 최단경로이므로 다익스트라 알고리즘을 활용하면 된다. //주어진 두 정점을 반드시 거쳐야한다. 만약 a, b 정점을 거쳐야한다면 // 1 -> a -> b -> n or 1 -> b -> a -> n 두 가지 경우만 구하면 된다. // 그러면 a와 b 각각에서 다익스트라를 돌리면 모든 값을 구할 수 있다. -> 다익스트라 두 번만 돌리면 된다. #include #include #include #include #define INF 1e9 using namespace std; int n, e; //n: 정점 개수, e: 간선 개수 int v1, v2; //거쳐야하는 정점 v1, v2 ..

    1753번: 최단경로 (BOJ C/C++)

    1753번: 최단경로 사용 언어: C++ 풀이 //우선 순위 큐를 이용한 다익스트라 알고리즘으로 최단경로 구하기 #include #include #include using namespace std; #define INF 1e9 int v, e, start; //V: 정점의 개수, E: 간선의 개수, start: 시작 정점의 위치 vector arr[20001]; //각 노드가 연결된 노드 정보 저장 //1번째 노드가 3번째 노드에 연결되어있다를 표현하려면 arr[1] int dist[20001]; //최단 거리 정보 저장 void dijkstra(int start) { priority_queue pq; // pq.push({0,start}); dist[start] = 0; while(!pq.empty()..