목록분류 전체보기 (58)
-
브루트포스로 풀릴것 같은데 왠지 시관초과가 날 것 같다. 꼭 다시 재귀방법으로 풀어보기로. 변수 정의를 잘 해야겠다. D[x] 를 "x를 1로 만드는데 필요한 최소한의 연산 횟수" 라고 정의한다면 문제가 쉬워진다. 코드:#include using namespace std; int D[1000001]; int main(){int X;cin >> X; D[1] = 0;D[2] = D[3] = 1;int temp = 0;for (int i = 4; i
점화식으로 바로 접근해서 헷갈리는 부분이 많았다. D[n] = Max(D[n-2),D(n-1) + S(n) 이런 형식을 가지고만 생각하면 풀기 너무 어려워진다. 경우의 수를 나누어야 한다. 제일 마지막 계단은 무조건 밟아야 하는 것과 세번 연속 오를 수 없다는 것을 기준으로 경우를 나눠야 한다. 두가지 경우로 나누어 생각. 즉, 점화식을 세울 때 O X O O --> D[n-3] + S[n-1] + S[n] // 전전전칸까의 최대값 + 전계단 + 마지막 계단 ? O X O --> D[n-2] + S[n] // 전전칸까지의 최대값 + 마지막 계단 코드: #include /*계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수..
DP 기초. 인덱스 문제 때문에 한참을 헷갈렸다. 특별한 알고리즘 없이 결국에 왼쪽으로 가느냐 오른쪽으로 가느냐 이부분 인덱싱 처리만 잘해주면 된다. 인덱스 계산이 가장 짜증난다나에겐... 코드: #include using namespace std; int arr[125251];int D[125251]; int MAX(int a, int b){return a > b ? a : b;}int height(int a){int tmp = 0;int ret = 0;for (int i = 1; i N;for (int i = 1; i arr[i];}D[1] = arr[1];for (int i = 2; i
3.1 클래스와 구조체의 유사점 및 차이점- 클래스는 정말 쉽게 생각하면 함수를 포함할 수 있는 구조체라고 할 수도 있다.- 구조체 안에 함수가 존재하는것과 유사하지만, C언어에서는 문법적으로는 클래스와 똑같이 구현하는 것은 불가능하다.TMP a = {"name",age};a.Function(&a) // a.Function() 함수(메소드)를 호출하는데 있어서 차이가 있다. this 포인터와 관련 있다.(객체가 생성된 시점에서의 객체 주소를 모르기 때문에 this 사용) - 구조체와 다르게 "생성자"를 이용해서 초기화 할 수 있다.- 생성자는 반환자료형이 없고, 자동으로 호출되는 함수.- 멤버 변수가 참조자 형식이면 반드시 초기화 목록을 이용해서 초기화 해야한다.(평소에도 사용가능하다)CTEST():m_..
2.1 디폴트 매개변수- c++에서는 절대로 호출자의 코드만 보고 함수 원형을 확정해서는 안된다.- 피호출자 함수 매겨번수의 디폴트 값은 반드시 오른쪽 매개변수부터 기술해야 한다.- 디폴트 매겨변수는 모호성을 야기할 수 있으므로, 가급적이면 자제하는 것이 좋다. (단, 미래 유지보수를 위해서는 필요할 수 있다) 2.2 함수 다중 정의- C에서는 이름이 같은 함수가 존재할 수 없다. C++ 에서는 Overloading 을 통해 함수의 "다형성"을 지원한다.- 함수를 다중 정의하는 이유는 사용자의 편의성과 확장성 때문.- 같은 일을 하는 코드가 다중 정의된 함수가 여러개 존재하면 유지보수 측면에서 매우 비효율적, 따라서 C++ 에서는 가급적 함수 템플릿을 권장함. template 반환형식 함수이름(매개변수)..
틀렸는데 대충 로직은 맞다. 다시 짜기 귀찮음 + 예시 한개 통과하면 다른 것에서 실패. 즉, 새롭게 짜야하는데 그러기 싫기에 먼 훗날 다시 보는것으로,. 코드: #include #include using namespace std;int arr[50];int main(){int N, M, cnt = 0;cin >> N >> M;deque dq;for (int i = 0; i > arr[i];}int k = 0; while (M--){ int index;for (int i = 0; i < N; i++){if (dq[i] == arr[k]){index = i + 1;break;}} if (arr..
제출한 코드가 맞긴 하지만 뭔가 찝찝하다. 무분별하게 STL을 가져다 쓴 듯하다. 코드:#include #include #include #include #include using namespace std; int main(){ //pair p1;//p1 = make_pair(10, 20);int T = 0;cin >> T;while (T--){int N, M,cnt=1;cin >> N >> M;queue Q;vector V(N);for (int i = 0; i > get;V[i] = get;pair p;p = make_pair(i, get);Q.push(p);}sort(V.begin(), V.end());int index = N-1;while (true){if (..
#include #include #include #include #include using namespace std;int VN, E, S;int V[1001][1001];bool BFS_visited[1001];bool DFS_visited[1001];void BFS(int x){queue Q;BFS_visited[x] = true;Q.push(x);while (!Q.empty()){int x = Q.front(); Q.pop();cout S;int r, c;for (int i = 0; i > r >> c; V[r][c] = 1;V[c][r] = 1;}DFS(S);cout