본문 바로가기

전체 글

동적할당 이거걍 정적할당은 미리 정해두고 근데 그렇다고 크기 ㅈㄴ 크게하면 최적화부터 쓸대없는 공간 낭비함그래서 동적할당 하는건데 이거 하면 실행되면서 크기가 정해진다 그래서 유동적이다heap영역c언어나 자바와 같은 프로그래밍 환경에서 원시 자료형이 아닌 보다 큰 크기의 데이터를 담고자 동적으로 할당하는 메모리 공간을 자칭c언어에서 말하는 동적할당이란 heap영역에 필요할 때마다 메모리 공간을 할당하고 더 이상 필요하지 않을 경우 메모리를 해제해주는 과정을 의미장점상황에 따라 원하는 크기 만큼의 메모리가 할당되므로 경제적 (malloc or calloc)이미 할당된 메모리라도 언제든 크기를 조정할 수 있다(realloc)단점c언어의 경우 GC(Garbage Collector)가 없기 때문에 , 개발자가 직접 명시.. 더보기
Call of Value && Call of reference call by valueC언어에서 지원하는 방식,함수에서 값을 복사해서 전달하는 방식, 인자로 전달되는 변수를 함수의 매개변수에 복사 원본 값을 바꿀 필요가 없는 경우 사용call by referenceC언어에서의 방식은 주소값 자체를 복사해서 넘겨주는 것이므로 call by value주소값을 복사해서 넘겨주는걸 call by address 방식이라고 함C언어에선 call by reference를 지원하진 않는데call by address를 통해서 call by reference와 같이 사용가능 그래서 그냥 일반적으로 call by reference이렇게 부름#include //call by valuevoid swap1(int a, int b) { int temp; temp = a; a .. 더보기
[백준] 단어의 개수 - 1152번 1.문제 : 출력문제영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.입력첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.출력첫째 줄에 단어의 개수를 출력한다.2.문제 풀이C언어 #include int main() { char s[1000001]; scanf("%[^\n]", &s); // 띄어쓰기도 받겠다 int cnt = 0; // 공백의 개수를 새기 위한 .. 더보기
[백준] 숫자의 개수 - 2577번 1.문제 : 출력문제세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.입력첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.출력첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가.. 더보기
[백준] 팩토리얼- 10872번 1.문제 : 출력문제0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.입력첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.출력첫째 줄에 N!을 출력한다.2.문제 풀이C언어 반복문으로 풀기 #include int main() { int i = 0; int n; int k = 1; scanf("%d", &n); while (n 12) { printf("다시입력:"); scanf("%d", &n); } for (i = 1; i C언어 재귀함수로 풀기 #include int add(int k) { if (k == 0) return 1; return k * add(k - 1);}int main() { int n; scanf("%d", &n); while (n 12) { .. 더보기
[백준] 소수 찾기- 1978번 1.문제 : 출력문제주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.입력첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.출력주어진 수들 중 소수의 개수를 출력한다.2.문제 풀이C언어 #include int main(void){ int n; int num, count = 0; scanf("%d", &n); for (int i = 0; i 더보기
[백준] 팩토리얼 10872번 1.문제 : 출력 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 2.문제 풀이 #include int sum(int num){ if (num == 0)return 1; elsereturn num * sum(num - 1); } int main() { int n; scanf("%d", &n); /*while (n 12) { printf("다시입력:"); scanf("%d", &n); }*/ sum(n); printf("%d\n", sum(n)); return 0; } 3.문제 풀이 위에 재귀 함수로 넣은수만큼 곱하는 재귀함수를 만들었고 주석 처리를 했지만 저 주석처리를 한 부분은 n의 값을 0부터 12까지 받고 그게 아니라면 다시 받는 while문을.. 더보기
[백준] 별 찍기 - 2 2439번 1.문제 : 출력 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오. 2.문제 풀이 #include int main() { int i, j, k; scanf("%d", &k); for (i = 1; i 더보기