본문 바로가기
728x90

분류 전체보기255

assert (단언하기) in C++ assert assert 는 Debug 모드에 실행된다. 디버깅시 컴파일러의 도움을 받을 수 있다. static_assert는 컴파일 타임에 적용된다. assert 는 런타임에 적용된다. 반대로 assert 키워드는 Release 모드에서는 실행이 안된다. assert 변수 체크할때 사용 할 수 있다. 런타임에 적용 #include using namespace std; int main(void) { int a = 1; a+=9; /*... 많은 과정을 생략중...*/ assert(a==10) //이 과정이 끝나면 a는 반드시 10 이어야 한다고 가정 // 만약 19번 행에서 a가 10이 아닌 다른 수면 // debug모드에서 에러가 나면서 콘솔로 출력이됨. // return 0; } static_asse.. 2020. 12. 15.
템플릿(Template) (2/2) (템플릿 특수화) 템플릿 매개변수 일반적으로 클래스 템플릿을 작성할 때는 template 처럼 꺽쇠괄호 안에 매개변수를 나열한다. 이 매개 변수 T뿐만 아니라, 함수의 매개변수처럼 원하는 수 만큼 지정할 수 있다. 이때, 매개변수를 타입 대신 디폴트 값으로 정해도 된다. template //템플릿의 타입을 2개로 m_array의 size를 받는다. class ClassArr { private: T m_array[size]; public: T* getArray() { return m_array; } T& operator[](int index) { return m_array[index]; } void print() { for (int count = 0; count < size; ++count) cout 상속 특정한 타입에 대.. 2020. 12. 14.
템플릿(Template) (1/2) 템플릿(template) C++에서 언어 차원에서 객체지향 프로그래밍 뿐만 아니라 제네릭 프로그래밍(generic programming)도 지원한다. 제네릭 프로그래밍은 데이터를 중요시하는 객체지향적 프로그래밍 철학보단 알고리즘에 그 중점을 두었다. 템플릿(template)은 데이터 타입(data type)이 아닌 매개변수의 타입에 따라 클래스를 생성하는 클래스 템플릿 과 메서드 템플릿, C++14 이후 부터는 변수 템플릿 이 있다. 또한 템플릿은 템플릿 특수화라 하여 범위에 따라 다르게 템플릿을 적용시키는 템플릿 특수화 라는 개념이 있다. 함수 템플릿 특수화 클래스 템프릿 특수화 포인터에 대한 특수화 템플릿에 의한 형변환은 컴파일 타임에 결정된다. 즉 사람이 타입을 맞춰줄 필요없이 컴파일러에게 타입 결.. 2020. 12. 13.
2차원 동적 배열 할당과 해제 (배열 vs 벡터) 벡터를 애용하자 2차원 vector 선언 vector v2; //2차원벡터 선언 vector v1 //1차원 벡터 선언 v1.push_back(2); v1.push_back(20); v1.push_back(337); //v2[0][0] == 2, v2[0][1] == 20, v2[0][2] == 337 v2.push_back(v1); 2차원 vector 초기화 //5x10 0으로 초기화시키기 (10열의 각 원소가 0인 배열을 5줄(행) 만든다.) vector v(5, vector(10,0)); //5x5 순환 접근 2차원 배열과 똑같다. for(int i=0; i 2020. 12. 7.
2352 반도체 설계 www.acmicpc.net/problem/2352 [ 2352번: 반도체 설계 첫째 줄에 정수 n(1 ≤ n ≤ 40,000)이 주어진다. 다음 줄에는 차례로 1번 포트와 연결되어야 하는 포트 번호, 2번 포트와 연결되어야 하는 포트 번호, …, n번 포트와 연결되어야 하는 포트 번호가 주 www.acmicpc.net ](https://www.acmicpc.net/problem/2352) (문제 풀이) 해당 문제의 요구사항 왼쪽의 포트들을 오른쪽의 포트로 겹치지 않게 가장 많이 연결할때의 포트 갯수를 구한다. 가장 쉽게 생각 해볼 수 있는 최선의 방법은, 시작 포트에서 부터 가장 적은 번호와 연결시키는 방법일 것이다. 가장 최악의 경우를 생각해보면 가장 첫번째 포트가 가장 마지막 포트와 연결 되는 경우.. 2020. 12. 7.
17144 미세먼지 안녕! www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net (문제 풀이) 이 문제는 별 다른 시간복잡도와 알고리즘의 사용을 요구하지 않는다. 시뮬레이션 구현의 문제이다. 하나씩 어떻게 동작하는지 예제 그림의 도움을 최대한 받아서 하나씩 따라가며 시작해본다. 1. 확산을 하고 2. 공기청정기의 위 아래 기준으로 배열의 값들을 회전시킨다. 그렇다면, 1. 확산을 어떻게 시킬것인가 모든 먼지가 있는 칸에 확산되는 값들과, 감소되는 기존 미세먼지 중심의 감소값을 따로 Cop.. 2020. 12. 7.
enum과 enum class (열거 타입과 엄격한 열거 타입) enum (열거형) enum 타입 내부 멤버들에게 정수(int)값으로 이름을 붙일 때 사용한다. 주로 내부 멤버이름을 대문자로 이름 짓는경우가 많다. 각 열거자들의 값은 이전 열거자 값에 +1이 증가 된 값으로 알아서 할당된다. ex) enum days {Sunday = 1 , Monday, Friday=10, Wednesday}; Monday == 2 (True) , Wednesday == 11 (True) 만약 enum 타입의 첫 번째 멤버에 값을 생략하면 컴파일러가 알아서 0부터 대입 해준다. 실제 메모리를 잡아먹지 않는다. 단 열거자가 할당된 변수에 대해 메모리가 할당됨. 그럼 열거형을 쓰면 좋은점은? 왜 써요? 위험한 상황(의도하지 않게 타입의 값이 변경되어 다르게 동작 하는 상황들)을 피할 수.. 2020. 12. 6.
[Summer/winter Coding ~ (2018)] 배달 https://programmers.co.kr/learn/courses/30/lessons/12978?language=cpp 코딩테스트 연습 - 배달 5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4 programmers.co.kr (풀이) 인접리스트를 만들어 DFS를 이용하여 푼다. (1) Input, 노드간 가중치가 최소인 거리만을 인접리스트로 만들어준다. _distance[][] 사용 (2) check[from][to]로 이전 노드에서 다음 노드까지 거리를 구해준다. 이 거리를 구하는 이유는 재방문시 더 짧은 최단거리가 있으면 업데이트 .. 2020. 8. 7.
[Summer/winter Coding ~ (2018)] 스킬트리 https://programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr (풀이) 1. Skill의 우선순위를 정한다. 2. Skill_trees 각 String원소들이 우선순위에 맞는지 확인한다. #include #include #include #include using namespace std; map _map; void check_priority(string skill); bool IsGetSkill(string spell); int solution(string skill, vector skill_trees) { int answer = 0; check_priority(skill); for (int i = 0; .. 2020. 8. 7.
14891 톱니바퀴 https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net (풀이) 4개의 톱니바퀴가 회전하는 시뮬레이션 문제이다. 단순히 구현으로 풀었다. 가장 먼저 고려하는 부분은 1)회전이 가능한 톱니바퀴를 어떻게 찾을 것인가. 2)회전은 어떻게 진행되는가. 3)진행이 끝나고 점수를 획득하는 방법 회전이 가능한 톱니바퀴는 1번 톱니바퀴의 세번째 톱니 2번 톱니바퀴의 세번째, 일곱번째 톱니 3번 톱니바퀴의 세번째, 일곱번째 톱니 4번 톱니바퀴의 일곱번째 톱니 를 .. 2020. 8. 7.
728x90