본문 바로가기

전체 글153

leaks 누수위치 추적하는 방법(MallocStackLogging방법) 1. iterm 창을 두개 실행시킵니다. 2. 하나의 iterm에 export MallocStackLogging=1 을 쳐서 환경변수 설정을 해줍니다. 3. 프로그램을 실행시켜 줍니다. 이때 실행파일을 만들려고 컴파일 할때 -g 라는 옵션을 넣어준다 ex) 4. 다른 iterm창에서 leaks --list 실행한파일명 위와 같이 적고 엔터를 누르면 5. 위와 같이 Call stack 이 뜨고 뒤에 메모리 누수가 난곳이 ft_strjoin.c :28 이렇게 ft_strjoin.c함수의 28번째 줄에 일어나고 있다는 것을 알수있습니다. 2023. 2. 17.
백준 13305 주유소 c언어 https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 사고과정) 1. 이중 while문을 사용하여 문제를 해결할려고 접근 2. 굳이 이중 while문을 사용하지 않고 하나만 써도 가능할것이라 생각이들었음 3. 주유소1*(도로1) + 주유소1*(도로2) == 주유소1 * (총 도로) 라는 논리를 이용해서 문제해결 4. 주유소 1과 주유소 2를 비교하여 더작은 주유소를 기준으로 도로를 곱해준다. 개선점 || 비판점) 1. 굳이 N에 lon.. 2023. 2. 15.
백준 11399 ATM c언어 https://www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 사고) 1. 각 사람들의 기다리는 시간의 합을 구하는 문제인데 딱 보자마자 오름차순 정렬로 다 합쳐서 답을 구하면 될것이라 생각했다. 2. 오름차순 정렬에는 여러가지 방법들이 있지만 내가 알고 있는 정렬중에서 qsort정렬을 사용하기로 생각했다. 3. qsort함수가 빠르게 정렬할수 있다고 생각했다. 4. 정렬한후 각 사람당 기다리는 시간을 더해주는데 이때 while문을 한번더 사용하여 앞에 기다리는 시간도 합쳐질수 있도록했다.. 2023. 2. 14.
백준 11650 좌표정렬하기 c언어 https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 사고과정) 1. 퀵정렬을 이용해서 해결할려고 하니 내가 알거 있는 퀵정렬은 배열 하나만 사용해서 정렬하는 것이라 알고 있다. 2. 그래서 구조체를 이용해서 접근 하기로 생각했다. 3. 구조체 선언후 퀵정렬을 사용한다 이때 퀵정렬의 비교함수 부분을 아래와 같이 고쳐서 사용했다. 개선점 || 비판점) 나의코드) #include #include ty.. 2023. 2. 12.
백준 1427 소트인사이드 c언어 https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 1. 버블정렬이 생각났지만 비효율적인 정렬 방식이며 qsort정렬도 배웠기 때문에 이걸 이용하기로 결정 2. 기존 내가 알던 qsort정렬은 오름차순만 알고 있었는데 compare함수에 부호만 반대로 하면 내림차순이라 쉽게 만듬 3. 처음 배열을 result[] = {0}; 이렇게 선언하니까 세그먼트 오류가 떴다. 4. 그래서 어차피 숫자가 11자리가 최대이기 떄문에 result[11] = {0}; 로 바꿔 선언해주니 맞게 되었다. 나의코드) #include #include int .. 2023. 2. 3.
백준 1934 최소공배수 c언어 https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 1. 최소공배수를 구할때 유클리드 호제법을 이용해서 최대공약수를 우선 구해준다. 2. 최소공배수는 숫자1 * 숫자2 를 한값에 최대공약수를 나누어주면 최소공배수가 되는걸 이용해 해결한다. #include intEuclidean(int A, int B) { inttemp; if (A < B) { temp = A; A = B; B = temp; } if (B == 0) return.. 2023. 1. 29.
유클리드 호제법 c언어 구현하기 두 정수의 최대 공약수를 구하는 알고리즘 두 수 중에서 큰 수를 a, 작은 수를 b라고 하고 a를 b로 나눈다. a가 b로 나누어떨어지면 두 수의 최대공약수는 b이다. a가 b로 나누어떨어지지 않으면 a를 b로 나눈 나머지와 b에 대하여 1번부터 다시 반복한다. #include intEuclidean(int a, int b) { if (b == 0) return (a); else return (Euclidean(b, a%b)); } intmain() { inta = 10; intb = 4; printf("%d", Euclidean(10, 4)); return (0); } 10과 4 의 최대 공약수 = 2 가 출력된다. 위의 방법으로 최대 공약수를 구하면 최소공배수 = (a * b) / 최대공약수 2023. 1. 29.
qsort함수 stdlib.h void qsort (void *base, size_t nel, size_t width, int (*compare)(const void *, const void *) base = 정렬하고자 하는 배열의 포인터 nel = 배열의 각 원소들의 총 수 width = 배열에서 원소 하나의 크기 (*compare) = 비교를 수행할 함수 포인터 비교함수는 -1, 0, 1 중 하나 반환해야한다. 오름차순 비교함수만든 예제코드) intcompare(const void *first, const void *second) { if (*(int*)first > *(int*)second) return (1); else if (*(int*)first < *(int*)second) return (-1); else.. 2023. 1. 28.
백준 1037 약수 c언어 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 1. 약수가 모두 주어졌을때 (최소약수)*(최대약수) = N 이라는 전략을 이용해서 해결한다. 2. 우선 배열이 오름차순으로 정렬시켜야하므로 qsort함수를 이용했다. 3. 정렬된 배열에 최소약수와 최대약수를 곱해 구하고자하는 숫자를 찾는다. 나의코드) #include #include intcompare(const void *first, const void *second) { if (*(i.. 2023. 1. 28.
백준 5086 c언어 https://www.acmicpc.net/problem/5086 5086번: 배수와 약수 각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다. www.acmicpc.net 1. else if 로 A == 0 && B == 0 일때 break ; 라는 조건을 넣어서 런타임 에러가 떴다. 2. 0 0 이 위의 if 조건에 포함될수 있으니까 계속 while문이 돌아가서 런타임 에러가 떴던것이라 생각 3. 다른 if문으로 조건을 다시 넣어서 코드를 짜니 정답이 되었다. 나의답안) #include intmain() { intA, B; while (1) { scanf("%d %d", &A, &B); if (A == 0.. 2023. 1. 27.
728x90