2025/047 백준 15956 숏코딩 (c++) (으아아) 예외처리에 매우 매우 매우 주의해가며 푼다 string s; //원본 문자열vector tokens; //&&단위로 끊은 조건식들map parent; //==로 연결되어있는것들 부모배열vector > diff; //!=로 연결된것들map> group; //==집단들map digit; //상수가 포함된 집단이렇게 사용하여 풀었다 string find_parent(string s){ if (parent[s] == s) return s; else return parent[s] = find_parent(parent[s]);}void union_find(string s1, string s2){ s1 = find_parent(s1); s2 = find_parent(s2); parent[s1] = s2;.. 2025. 4. 28. 백준 2342 Dance Dance Revolution (c++) DP라고 하기에도 애매하고 아니라기에도 애매한.. 애매한 문제 int dp[100010][5][5] = { 0, };vector arr;int calc(int from, int to){ if (from == 0 && to != 0) return 2; if (abs(from - to) == 3) return 3; else if (abs(from - to) == 2) return 4; else if (abs(from - to) == 1) return 3; else if (abs(from - to) == 0) return 1;}먼저 발이 이동할때 얼마나 힘이 드는지 구하는게 꽤나 길어서 함수로 뺐다 dp는 [arr 인덱스][왼발 위치][오른발 위치] = 이 상태의 최소값 int n;int idx = 0;arr.. 2025. 4. 14. 2025/04/09 ch.18 표준 라이브러리 컨테이너 표준 라이브러리 컨테이너는 대부분 크기를 조절할 수 있고 원소의 추가나 삭제에 따라 자동으로 늘어나거나 줄어듦 18.1.1 원소에 대한 요구사항표준 라이브러리 컨테이너는 원소를 값으로 처리함(값 의미론)원소의 복제본을 저장하고 대입 연산자로 대입하고 소멸자로 원소를 삭제함표준 라이브러리를 사용하는 클래스를 작성할 때는 반드시 복제할 수 있게 만들어야 함 원소를 레퍼런스로 처리하고 싶다면 원소를 그대로 넣지 않고 원소에 대한 포인터를 저장함 이동 전용 타입, 복제할 수 없는 타입도 컨테이너에 저장할 수 있지만 컴파일 에러를 발생시킬 수 있다 할당자원소에 대한 메모리를 할당하거나 해제할 수 있다 비교자원소를 정렬하는데 사용 18.2 순차 컨테이너1. vector원소를 추가,삭제하는 작업은 선형 시간원소의 추.. 2025. 4. 9. 2025/04/08 ch.17 반복자와 범위 라이브러리 17.3.2 역방향 반복자표준 라이브러리는 양방향 또는 임의 접근 반복자로 역방향을 탐색하게 해주는 reverse_iterator 클래스 템플릿을 제공함 17.3.3 이동 반복자move_iterator의 역참조 연산자는 값을 자동으로 우측값 참조로 변환함복재하지 않고도 값 이동 가능단, 이동 의미론을 적용하기 전에 반드시 해당 객체가 이를 지원하는지 확인해야 함 17.4 범위range 라이브러리에서 제공하는 범위는 반복자 위에 추상화를 한 단계 더해서 반복자가 일치하지 않는 에러를 제거하고, 범위 어댑터를 통해 원소 시퀀스를 변환하거나 필터링하는 부가 기능도 제공함 2025. 4. 8. 2025/04/07 ch.17 반복자와 범위 라이브러리 17.1 반복자컨테이너마다 원소에 대한 반복문을 지원하는 특수한 스마트 포인터인 반복자가 정의되어 있음반복자는 컨테이너의 특정 원소를 가리키는 포인터++연산자를 이용해 다음 원소를 가리키도록 변경 가능반복자는 반드시 복제 생성자, 복제 대입 연산자, 소멸자를 제공해야 함반복자의 좌측값은 반드시 맞바꾸기를 지원해야 함 반복자는 여섯가지로 분류 가능함 연속 반복자는 모두 임의 접근 반복자임의 접근 반복자는 모두 양방향 반복자양방향 반복자는 모두 정방향 반복자정방향 반복자는 모두 입력 반복자출력 반복자의 요구사항을 만족하는 반복자 - 가변 반복자아니면 상수(불변) 반복자 알고리즘마다 필요한 반복자를 지정하는 표준 방식은 반복자 템플릿 타입 인수에 이름을 넣는것타입검사 기능이 없으므로 반복자 타입을 지정하고 다.. 2025. 4. 7. 백준 2887 행성 터널 (c++) 행성의 갯수만 10만개간선은 10만의 제곱이므로 일반적인 방법으로는 어떤 최적화를 해도 시간초과다애초에 간선 10만^2개를 만든 시점에서 메모리 초과(50테라라고 함)로 아웃 즉 간선을 만들고 가지치기를 하면 안되고 만들기 전에 경로가 될 가능성이 있는 간선만 만들어야 하는 문제이다 그것은 터널의 비용이 특수하기 때문에 가능하다min(|ax-bx|,|ay-by|,|az-bz|)공간의 세 축 각각의 거리중 가장 작은 값이 비용이다 a -> b -> c 노드가 수직선 상에 존재할때a->b + b->c = a -> c 일 것이다이때 우리가 원하는건 a,b,c 모든 지점을 통과하면서 가장 비용이 적게드는 경로를 찾는 것이므로굳이 인접하지 않은 a -> c 경로는 생각할 필요가 없다는 뜻이다이보다 노드가 많을때.. 2025. 4. 7. 2025/04/06 ch.16 C++ 표준 라이브러리 둘러보기 C++표준 라이브러리 중에서도 가장 핵심은 제네릭 컨테이너와 제네릭 알고리즘원래 표준 템플릿 라이브러리(STL) 이라는 서드 파티 라이브러리였다이제는 표준 라이브러리 이므로 STL은 사실 잘못된 용어 표준 라이브러리에서 제공하는 대다수의 알고리즘과 컨테이너가 상호 호환되고 컨테이너에 담긴 데이터 타입의 종류에 무관하게 작동하는 범용성프로그래머가 직접 정의한 것보다 더 빠른 컨테이너와 알고리즘을 제공 템플릿 활용템플릿을 활용하면 제네릭 프로그래밍을 할 수 있음모든 종류의 객체를 다룰 수 있을 뿐만 아니라 코드 작성 시점에는 모르던 객체도 처리할 수 있게 만들 수 있음템플릿 코드를 만드는 프로그래머- 객체 생성에 필요한 클래스 요구사항을 명시해야 함- 비교 연산자나 복제 생성자 등과 같은 해당 템플릿을 사용.. 2025. 4. 7. 이전 1 다음