분류 전체보기

Language/C

포인터(5)

이번에는 함수에 배열(포인터) 대상의 인자전달에 관해 이야기를 하려고 한다. 하지만 그전에 함수에서 인자의 전달이 어떻게 되는지 먼저 짚고 그 다음으로 넘어가자. 인자 전달의 기본방식 - 복사 함수호출시 전달되는 인자의 값은 매개변수에 복사가 된다. 다음 예제를 살펴보자. #include int test_func (int num) { return num + 1; } int main () { int test = 1; int a = test_func(test); // test에 저장된 값이 num에 복사된다. } 이 코드에서 test_func함수에 test라는 값을 인자로 전달하고 있다. 언뜻보면 test변수 자체를 넘기는 것 같지만, 사실은 test에 저장된 값을 test_func의 인자인 num에 복사하..

Language/C

포인터(4)

마저 못한 정리를 시작하자. 상수형 문자열을 가르키는 포인터. 지금까지는 배열을 통해 문자열을 선언했었다. 하지만 우리는 포인터를 배우면서 배열은 상수형 포인터임을 배웠다. 그렇다면 포인터를 통해 문자열을 다룰 수 있을까? char str1[] = "string 1"; 이는 배열을 통해 선언한 문자열이다. 더 정확히 말하면 변수 형태의 문자열이다. 우리가 임의로 문자열의 일부를 수정할 수 있기 때문이다. 포인터와 배열은 상수냐 변수냐에 따라 구분되는 같은 것이라고 볼 수 있다. 그렇기에 우리는 다음처럼 쓸 수도 있다. char *str2 = "string 2"; 이렇게도 역시 가능하다. 배열과 포인터 모두 문자 s의 주소값을 나타낸다. 그럼 차이점이 무엇인가? 몇가지 차이점이 존재한다. 첫번째, 메모리상..

Language/C

포인터(3)

배열의 포인터 연산 앞의 배열에 관한 내용을 조금 복습하자면, 배열의 이름은 상수형 포인터라고 했다. 그렇다면, *연산이 가능할까? 정답은 Yes이다. 다음 예제를 살펴보자. #include int main () { int arr_i[3] = {1,2,3}; double arr_d[3] = {1.1, 2.2, 3.3}; printf("%d %g\n", *arr_i, *arr_d); *arr_i += 10; *arr_d += 120.5; printf("%d %g\n", arr_i[0], arr_d[0]); } 실행 결과 1 1.1 11 121.6 포인터의 *연산이 무리없이 작동하는 것을 알 수 있다. 포인터를 배열의 이름처럼 배열이름이 포인터이고 포인터처럼 사용할 수 있다면, 포인터를 배열처럼 사용할 수 ..

coding_test/BAEKJOON

백준 15829번 C언어 풀이

https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정 www.acmicpc.net 해시함수에 관한 문제, small과 large문제 합하여 모두 맞춰야 하는 문제인데 자꾸 부분정답만 나온다.... #include #define r 31 #define M 1234567891 long long pown (int a, int exp) { long long res = 1; for (int i = 0; i < exp; i++) { res *= a; } return res; } int ..

coding_test/BAEKJOON

백준 11050번 C언어 풀이

https://www.acmicpc.net/problem/11050 11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 조합을 구하는 문제. 이항계수가 뭔지 까먹은 나 자신 반성하자... #include int fac (int n) { int res = 1; while (n > 1) { res *= n--; } return res; } int combination (int n, int r) { return fac(n) / (fac(r) * fac(n-r)); } int main () { int n, r; scanf("%d %d", &n, &r); printf("%d", combination..

coding_test/BAEKJOON

백준 1920번 C언어 풀이(미완)

https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net M개의 수가 N개의 숫자 배열에 들어있는지 찾는 문제. 중첩반복문을 쓸 때 느낌이 쎄하긴 했는데, 시간초과로 틀렸다. 근데 다른 방법이 있긴 한건가? #include int main () { int n, m; int i; int check; scanf("%d", &n); int a[n]; for (i = 0; i < n; i++) { scanf("%..

coding_test/BAEKJOON

백준 10250번 C언어 풀이

https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 규칙을 파악하면 금방 풀리는 문제. 함정들에 조심하자. 높이 H에 너비 W, N번째 손님이 주어지는데, 사실 W의 값은 중요하지 않더라. 만약 6 12 10의 입력이 들어오면, 10번째 손님은 402호실에 들어가면 된다. 따라서 층수는 N과 H의 나머지, 호실은 N과 H의 몫 + 1인 셈이다. 이렇게만 보면 쉬운문제이지만, 함정이 있다. N과 H가 나누어 떨어지는 경우 나머지값이 0이..

coding_test/BAEKJOON

백준 2231번 C언어 풀이

https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net https://codejin.tistory.com/10 백준 4673번 C언어 풀이 https://www.acmicpc.net/problem/4673 4673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어.. codejin.tist..

CodeJin
'분류 전체보기' 카테고리의 글 목록 (28 Page)