객체가 소멸할 때 소멸자가 실행되어 마지막 처리를 하게 된다. 이때 객체가 선언된 위치에 따라 소멸자가 실행되는 때가 달라진다. 객체가 데이터 영역에 선언되어 있다면 프로그램이 종료될 때 소멸자가 실행된다. 만약 객체가 함수에서 로컬로 선언되어 스택 영역에 존재한다면 프로그램 실행이 해당 영역을 벗어날 때 소멸자가 실행된다. 객체가 동적할당으로 생성되어 힙 영역에 존재한다면 delete를 통해 해당 객체를 제거할 때 소멸자가 실행된다.
C++ 코드를 작성하면서 cin과 getline을 통해 입력을 받을 수 있다. cin은 공백이 아닌 값이 나올 때까지 공백을 무시하다가 공백이 아닌 값을 공백이 나올 때까지 받아들인다. 마지막에 출현한 공백을 발견한 cin은 해당 공백을 버퍼에 그대로 남겨 놓는다. getline() 함수(cin.getline(), string의 getline())는 delimit이 나올 때까지 입력을 받고 해당 delimit은 입력으로 받아들이지 않고 버퍼에서도 제거한다. delimit을 의도적으로 작성하지 않으면 '\n' 개행문자가 delimit으로 기본값으로 지정된다. cin과 getline함수는 각각 연속해서 사용하는 것은 문제가 없지만 서로 혼용하는 경우 원하지 않는 결과를 얻을 수 있다. cin을 먼저 쓴 후 ..
별 찍기 - 9 문제는 단순한 구현 문제입니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) int N; int main(void) { scanf("%d", &N); for (int i = N; i >= 1; i--) { for (int j = 0; j < (N - i); j++) { printf(" "); } for (int j = 0; j < (2 * i - 1); j++) { printf("*"); } printf("\n"); } for (int i = 2; i
상근날드 문제는 반복문을 이용한 단순 연산 문제입니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) int bugger[3]; int drink[2]; int min = 0x0fffffff; int main(void) { scanf("%d %d %d", &bugger[0], &bugger[1], &bugger[2]); scanf("%d %d", &drink[0], &drink[1]); for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { if (bugger[i] + drink[j] - 50 < min) { min = bugger[i] + drink[j] - 50; } } } printf("%..
피보나치 수 2는 다이나믹 프로그래밍으로 해결할 수 있는 문제입니다. 피보나치 수를 구하기 위해 피보나치 수를 보관할 배열을 선언한 후 반복적인 연산을 통해 피보나치 배열을 업데이트시켜 최종적으로 원하는 피보나치 수를 구하도록 하여야 합니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) long long int fibo[120]; int N; int main(void) { fibo[0] = 0; fibo[1] = 1; scanf("%d", &N); if (N == 0) printf("%d\n", fibo[0]); else if (N == 1)printf("%d\n", fibo[1]); else { for (int i = 0; i < N-1; i..
A+B-6는 단순한 연산 문제이다. 본 글에서는 c언어를 이용하여 코드를 작성하였습니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) //https://ark-hive.tistory.com int T; int A, B; int main(void) { scanf("%d", &T); for (int i = 0; i < T; i++) { scanf("%d,%d", &A, &B); printf("%d\n", A + B); } } 문제는 다음의 링크에서 확인할 수 있습니다. https://www.acmicpc.net/problem/10953
가장 긴 증가하는 부분 수열 2는 이분법을 사용하여(솔직히 이 문제의 핵심은 이분법이 아닌 것 같습니다. 이분법만 아는 것으로는 조금 부족할 수도 있을 것 같습니다.;) 풀 수 있는 문제입니다. 원래 문제인 가장 긴 증가하는 부분 수열(LIS)문제는 동적계획법(완전탐색 + 메모이제이션)으로 해결할 수 있으나 N의 개수가 100만이 되어서 더 빠른 방식의 알고리즘을 고안해야 합니다. 문제를 곰곰히 생각해보면 다음과 같은 통찰을 얻을 수 있습니다. 수열의 어떠한 위치를 탐색하고 있다고 가정하면 우리는 그 이전의 수들로만 구성된 수열들을 상상할 수 있습니다. 어떤 수열은 1개의 숫자로만 이루어질 수도 있고, 어떤 수열을 2개, 3개 혹은 그 이상의 숫자로 만들어질 수 있을 것입니다. 우리가 구하고자 하는 것은..
K번째 수 문제는 최적화 문제를 결정 문제로 바꾸어 푸는 유형의 문제로 볼 수 있습니다. K번째 수를 X로 가정하면 X보다 작거나 같은 수는 K개 이상이라는 사실을 알 수 있습니다. 그보다 작으면 K번째 수가 될 수 없기 때문입니다. 작거나 같은 수가 K개 이상인 수 중 가장 작은 값을 찾는 문제로 생각해볼 수 있습니다. 이와 같은 최적화 문제를 X이상의 수에 대해 자기 자신보다 작거나 같은 수를 K개이상 가지고 있는지 확인하는 결정문제로 바꿀 수 있습니다. 이러한 결정문제는 이분법을 이용하여 해결할 수 있습니다. 작성한 코드는 다음과 같습니다. #include #pragma warning(disable : 4996) //https//ark-hive.tistory.com int N, K; int min(..
공유기 설치는 최적의 값을 찾는 문제를 참과 거짓을 결정하는 문제로 변환하여 이분법을 통해 해결할 수 있는 문제입니다. 문제의 지문을 그대로 해석하면 가장 인접한 공유기의 거리의 최대값을 구하는 문제로 생각할 수 있습니다. 이러한 최적화 문제를 참과 거짓을 결정하는 결정 문제로 변환하여 이분법을 이용하여 쉽게 해결할 수 있습니다. 위의 최적화 문제를 다음과 같은 결정 문제로 변환할 수 있습니다. "가장 인접한 공유기의 거리가 x이상이 되도록 공유기를 설치할 수 있을까" 이 질문에 대해서는 참 또는 거짓으로만 답을 할 수 있습니다. 만약 이 질문의 답이 참이라고 가정하면 가장 인접한 공유기의 거리가 x 이하인 모든 값으로 설치가 가능하다는 자명한 사실을 알 수 있습니다. 따라서 x이하의 값에 대해서는 더 ..
- Total
- Today
- Yesterday
- 백준
- 너비우선탐색
- backtracking
- 이진탐색
- 백트래킹
- 건이의 특제 떡국 끓이기
- 애니메이션
- 재귀함수
- 이분법
- 영어 어휘
- Git
- C++
- 정렬
- 큐
- 스택
- 구현
- 취미
- Push
- 알고리즘
- 영화
- Verilog
- recursive
- C언어
- gem5
- 완전탐색
- 구조체
- 메이플스토리
- BOJ
- BFS
- 베릴로그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |