분류 전체보기
-
[C++] friendC++ 2023. 4. 11. 20:58
내 클래스 멤버는 아니지만 내 클래스 멤버와 동일한 권한을 가졌다고 인정하는 것 friend keyword는 함수와 클래스 앞에 붙는다! [friend 함수] 일단 friend 가 붙으면 해당 클래스꺼는 절대 아님 외부에 선언된 함수인데 (전역함수 or 타 클래스 함수) friend 라고 선언된 클래스에서 friend라고 인정한 것임 friend 함수는 선언된 클래스의 모든 멤버에 접근할 수 있는 권한이 부여된다 즉, private까지 접근할 수 있다 [friend 선언 3종류] 1. 전역함수 bool equals(Rect r, Rect s) { // code } class Rect { // code friend bool equals(Rect r, Rect s); }; 전역함수는 소속 클래스가 없으므로 ..
-
[C++] staticC++ 2023. 4. 6. 20:54
c++에서의 static 은 원래의 global 전역변수를 클래스로 끌어들이는 역할이다 C에서 쓰인 global 전역변수가 C++에서는 static으로 업그레이드 된 것이다 참고로 C++에 static 클래스라는 것은 없다 static 변수와 static 함수 즉, static 멤버만 존재한다 또한 static 도 접근지정자를 탄다 public private 을 잘 구별해서 써줘야한다 [global이 쓰레기인 이유] global 전역변수 는 코드 전체에서 전역적으로 쓰이는데 1. 어떤 변수,함수와 연관되어 있고 어디 소속인지 파악하기 힘들다 코드 상에 왜 있는지 파악하기도 어렵 2. 아무 곳에서 접근 가능하기 때문에 보안성이 매우 떨어진다 (public으로 해놓으면 모든 곳에서 접근 가능하기 때문) 따라..
-
[C++] inline functionC++ 2023. 4. 3. 15:42
[ 인라인 함수 (inline function) ] 그냥 일반적인 함수를 사용하면 다음과 같은 많은 이점을 얻을 수 있다. 1. 함수 내부의 코드를 재사용할 수 있다. 2. 인스턴트 코드보다 함수에서 코드를 변경하거나 업데이트하기가 더 쉽다. 3. 함수 이름을 통해 코드가 무엇을 의미하는지 이해하기 더 쉽다. 4. 함수는 함수 호출 인수가 함수 매개 변수와 일치하는지 확인하기 위해 타입 검사를 한다. (매크로는 안한다.) 5. 함수는 프로그램을 디버그하기 쉽게 만든다. 그러나 함수는 함수가 호출될 때마다 발생하는 일정량의 성능 오버헤드가 있다는 단점이 있다. 이는 CPU가 다른 레지스터와 함께 실행 중인 현재 명령어의 주소를 저장(JUMP하기 위해)해야 하므로 (나중에 반환할 위치를 알 수 있도록) 모든..
-
[알고리즘] 조합론알고리즘 2023. 4. 3. 13:22
조합도 순열과 같은 느낌으로 풀면 되는데 조합의 특징만 살려주면 된다 조합은 순열과 다르게 순서가 상관이 없다 즉 1 2 3 이랑 2 1 3이랑은 같다. 따라서 오름차순으로 조합들을 출력한다 할때N을 base로 출력했으면 그 다음부터는 N이 없다고 생각해도 된다. 왜냐하면 N을 base로 생각하고 나온 조합들이 N이 들어간 모든 조합들이기 때문이다. 따라서 순열 DFS코드를 조금만 변형해주면 된다. #include #include #include #define SIZE 10using namespace std;int arr[SIZE];vector ans;int N, M;void print() { for (int i = 0; i > N >> M; for (int i = 1; i 매개변수로 start를 추가..
-
[알고리즘] 순열알고리즘 2023. 4. 3. 00:19
순열은 DFS로 풀 수 있는데 코드만 보면 감이 아예 안잡힌다 보통 DFS 떠올리면 그래프나 트리를 생각하고 적용하는데 순열 조합은 그래프 트리로 생각하면 안된다 배열 내에서 DFS를 쓴다고 생각해야함 보통 DFS는 재귀 or stack + visited 가 필요한데 여기서도 똑같다.적용되는 자료구조가 vector일뿐#include #include #define SIZE 10using namespace std;bool visited[SIZE];int arr[SIZE];vector ans;int N, M;void print() { for (int i = 0; i > N >> M; for (int i = 1; i 다음은 DFS(0)이 시작되고 1을 들어갔을 경우의 그림이다[1]cnt 변수가 전역변수가 아님...
-
[백준 13414] 수강신청백준/자료구조 2023. 3. 31. 13:42
이 문제를 deque로 푼다고 생각하면입력받을때 중복확인을 위해 완전탐색을 해야하는데if ((it = find(dq.begin(), dq.end(), x)) != dq.end()-1) 이때 deque를 통해 완전탐색을 하면 시간복잡도가100,000 x 500,000 = 50,000,000,000 = 500억따라서 1초안에는 못돌린다 그래서 unordered_map이랑 priority_queue 써서 품 이때 unordered_map에 있는 값들을 빼내 우선선위 큐에 집어넣어줘야되는데그때 해쉬맵을 vector로 바꿔서 vector 순회하면서 pq에 넣는 것이 훨씬 빠르다vector> v(um.begin(), um.end()); #include #include #include using namespace s..
-
[C++ STL] unordered_mapC++ STL 2023. 3. 31. 00:05
1. 말 그대로 정렬되지 않은 map 임2. hashtable 사용. 해시함수로 원소 찾음3. map의 특성을 그대로 가지고 가지만 정렬만 안되어있을 뿐임 4. 중복 허용X 5. 일반 map보다 탐색속도가 빠름map O(logN)unordered_map O(1) 보통 이럴때쓴다 1. 데이터를 받아야하는데 정렬이 필요없이 pair 객체로 받아야할때// key값 int value도 intunordered_map um; 2. 특정 key값의 원소들을 vector에 다 같이 저장하고 싶을때 // key값 int// value값 int 저장하는 vectorunordered_map> group;// key값 int // value값 pair객체를 저장하는 vectorunordered_map>> group; [un..
-
[백준 2204] 도비의 난독증 테스트백준/문자열 2023. 3. 26. 23:28
이 문제의 핵심은 두 가지이다 1. vector 을 sort 하면 사전순으로 해준다2. tolower을 이용하려면 string 변수 자체를 넣는게 아니라 해당 string을 구성하는 글자 하나씩 넣어야함string original, temp;cin >> original;temp = original;// 소문자로 변환for (int k = 0; k unordered_map을 사용하여소문자로 변환한 string을 key로 original string을 value로 넣어주어답을 출력할때 O(1)로 출력할 수 있게 해주었다 #include #include #include #include using namespace std;int main() { ios::sync_with_stdio(0); cin.tie(0);..
-
[알고리즘] Strict Weak Ordering (정렬기준)알고리즘 2023. 3. 26. 22:57
priority_queue 나 set , map 등 정렬이 동원된 STL을 만질때 정렬기준을 직접 만들어야하는때가 있는데 가끔 이때 invalid comparison 으로 디버깅 오류가 날때가 있다 그 이유는 바로 Strict Weak Ordering 때문인데 이 블로그를 통해 정렬기준 정의 시 주의해야할 점을 다 말해보려한다 [ C++의 정렬기준 판단 원리 ] 우선 strict Weak Ordering에 대해 알기전에 C++이 정렬을 어떻게 판단하는지 알아야한다 사용자지정 compare 함수는 return이 true이면 우선이라 판단한다 즉 return a > b; 이건 내림차순이다. 왜냐하면 a > b가 true라면 a가 b보다 우선이라 생각하므로 큰 수가 더 우선적으로 판단되기 때문이다 return..