728x90
반응형

C++ 193

C++문법 / 포인터, 메모리 해제

포인터는 C에서도 배웠겠지만 값 자체가 아니라 값의 주소를 가지고 있는 변수다. 어려워하는 것은 이해가 가지만 배워보면 그냥 그렇다고 생각이 된다. 변수 -> 주소를 담는 변수 + 값을 담는 변수 다시 말해서 포인터는 주소를 담는 변수(장소) 변수는 값을 담는 장소 일반적으로 포인터변수는 주소를 저장하므로 흔히 주소를 알아내기 위해서 앰퍼샌드,&를 써서 해당 변수의 주소를 알아낸다. int donuts = 4; int* ptr = &donuts; //*은 포인터라는 뜻이다. //출력해보면 /* donuts ptr을 출력해보면 ptr의 가지고 있는 주소 값이 아니라 가리키고 있는 값을 출력하고 싶을 때가 있다. 그렇다면 ptr 자체를 출력하는 것이 아니라 *ptr를 출력하면 ptr이 가리키고 있는 값이 출..

C++문법/ 열거체, Enum

const를 사용해서 기호 상수를 만드는 것 외에도 다른 방법을 제공한다. 새로운 데이터형을 정의할 수 있게 해주는 것이다. **다만 주 목적은 아니다. enum도 구조체 구문과 매우 흡사하다. enum spectrum { red, orange, yellow, green, blue, violet, indigo, ultraviolet }; 이렇게 수행하게 된다면 spectrum 이라는 새로운 데이터형을 만든다. **struct 뒤에 구조체의 이름이 나오는 것과 같다. -> spectrum 이라는 열거체라고 부른다. red, orange...의 순서대로 나온 것들을 순서대로 0부터 7까지 정수 값을 나타내는 상수로 만든다. -> red는 0이 된다. ultraviolet은 7이 된다. ** 명시하지 않았을 ..

C++문법/ 공용체, Union (메모리 절약 가능)

구조체랑 비슷하지만 다르다. 쉽게 말하자면 Type을 여러개 가지고 있는 변수라고 생각하면 되겠다. union one4all { int int_val; long long_val; double double_val; }; //구조체와 선언 방법이 비슷하다. 다만 one4all 이라는 공용체 자체는 한 번에 하나의 타입만 가질 수 있다. int의 값도 저장, long 값도 저장, double의 값도 저장하지만 한 번에 하나의 상태만 가진다. 이 공용체의 크기는 해당 타입 중에서 가장 큰 타입의 공간만큼 차지한다. long이 제일크다면 long의 크기를 가지는 공용체가 되는 것이다. **다시 말하면 이 공용체는 여러 가지 데이터를 쓰게되지만 이들을 동시에 사용할 일은 없을 때 메모리를 절약해주는 역할이다. 예를..

백준, BOJ, 14502번, 연구소 : C++ [CPP]

음.. 생각은 빨리했는데.. 오래걸림.. 왜냐면.. 초기화를 잘못했다. 아...내 1시간반 https://www.acmicpc.net/problem/14502 그렇게 어렵지 않았다. 벽을 무작위로 세워야 하는 것을 이미 알기에.. Brute Force를 해야하는 것은 알았지만 그냥 백트래킹 복습삼아 적용했다. 가장 처음 제출한 풀이.. #include #include #include #define X first #define Y second using namespace std; int map[8][8]; int visited[8][8]; int dx[4] = {1,-1,0,0}; int dy[4] = {0,0,1,-1}; int N,M; int ans = 64; stack stk; // DFS 스택 ve..

백준, BOJ, 2805번, 나무자르기 : C++ [CPP]

우선 숫자가 큰 문제이다. 뭔가 크다. 어렵진 않았지만.. 그냥 오랜만에 푸니까 감이 안왔다. https://www.acmicpc.net/problem/2805 시간초과 될 것을 알면서도 brute force로 해봤다. #include using namespace std; int N,M; int maxi = 0; int sum; int arr[1000001]; int main(){ cin >> N >> M; for(int i = 1; i> a; arr[i] = a; if(a>=maxi){ maxi = a; } } maxi--; while(1){ sum = 0; for(int j = 1; j0) sum += temp; } if(sum>=M){ break; } maxi--; } cout > N >> M; f..

백준, BOJ, 9251번, LCS : C++ [CPP]

어려웠다. 부분으로 쪼갤 수 있었지만 생각이 잘 안났다. https://www.acmicpc.net/problem/9251 모든 부분을 부분수열로 쪼개보니.. for문이 3개나 나와서 그냥 떄려쳤다. DP문제라는 것을 한 번에 파악할 수 있었다. 어떻게 전체 문제를 부분으로 쪼갤 수 있을까 고민했다. 처음에는 맨앞에서부터 접근했지만 틀린 접근법이었다. 마지막부터 조사했어야 했다. 길이가 L1, L2의 문자열이 있다. 만약 마지막 부분이 같다면 해당 마지막부분을 제외한 채로 나머지 L1 -1 , L2 - 1의 문자열의 가장 긴부분을 조사하면 될 터였다. 마지막 부분이 다르다면 둘 다 제외하는 것이 아닌 L1 - 1, L2 또는 L1, L2 - 1의 문자열을 조사하면되었다. 그리고 문자열이 비어있는 것과의 ..

백준, BOJ, 2003번 C++ [CPP]

바로 생각한 대로 실행하면 되는 문제다. https://www.acmicpc.net/problem/2003 우선 N~M번째 까지의 합은 1~M - 1~N-1 인것을 나는 이용했다. 하지만 이제부터는 잘한 사람들에게서도 나와 무엇이 다른지 공부하기로 했다 우선 나의 풀이를 보고 다른 잘한 사람들의 풀이를 비교해보자 #맞은 풀이 #include using namespace std; int N,M; int arr[10001]; int dp[10001]; // dp[i] -> 1~i번째까지의 합 // N~M 까지의 합은 1~M번째 까지의 합 - 1~N-1 번째까지의 합. int main(){ cin >> N >> M; int cnt = 0; for(int i=1; i> arr[i]; dp[i] = dp[i-1]..

백준, BOJ, 1094번 C++ [CPP]

https://www.acmicpc.net/problem/1094 처음에 생각했을 때.. 이진법? 생각났다. 문제를 읽고 예를 읽어보니 맞다. 즉, 이진법 수에서 1의 개수를 구하는 문제다. 즉, 우리가 이진법 변환을 어떻게 했는지 생각해봤다. 2로 나누면서 나머지를 세었다. 마지막까지 2로 나누어서 숫자를 판단했다. 코딩도 그렇게 했다. #include using namespace std; int N; int main() { cin >> N; int sum = 0; while (N >= 1) { sum += N % 2; N /= 2; } cout

백준, BOJ, 18111번 C++ [CPP]

1초지만 은근히 숫자가 적어서 해볼만하다 생각한 문제 https://www.acmicpc.net/problem/18111 처음에 든 생각은.. 다 조사해볼 생각은 안했고.. 어떠한 것이 가장 최소 시간을 가질지 계산해보기로 했다. 당연히 모든 블럭에 대한 평균 높이로 만드는 것이 최소시간이 걸릴 것이라 생각했다. 뭐 시간이 달라서 틀린 생각이 되었고 또한 답이 같을 경우 높이가 높은 것 까지 조사해봐야 했으므로 전수조사를 해야했다. brute force란다. 처음에 틀린 풀이를 보자 #include #include using namespace std; int N, M, B; //(1 ≤ M, N ≤ 500, 0 ≤ B ≤ 6.4 × 10^7) int minh = 257; int maxh = -1; int..

728x90
반응형