본문 바로가기

C언어63

백준 3052번 배열 원소 서로 다른 값 찾기 문제두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.입력첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.출력첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다. 우선적으로 생각할 수 있는것은 배열을 활용하여 해결할 수 있다.나머지를 배열의 원소로 저장하는 배열을 만들 생각을 하고 우선 입력값을 저장할 배열 (배열 A[10])을 만들었다.(코드를 간략화 하기 위해서는 이 .. 2024. 6. 21.
동적 메모리 할당 배열의 크기를 변수로 입력받아 사용하고 싶을때마다 컴파일러 설정을 바꿔주는것이 귀찮다.#define _CRT_SECURE_NO_WARNINGS#include #include int main() { int N; scanf("%d", &N); // 동적 메모리 할당 int* a = (int*)malloc(N * sizeof(int)); float* b = (float*)malloc(N * sizeof(float)); // 메모리 할당 실패 시 처리 if (a == NULL || b == NULL) { printf("메모리 할당 실패\n"); return 1; } int M = 0; // 초기화를 0으로 수정 float sum =.. 2024. 6. 21.
백준 5597번 배열의 차집합 활용 여러가지 풀이법이 있을 수 있겠지만 우선적으로 생각한것이 1~30의 값을 모두 가지는 배열을 하나 정의하고입력받은 28개의 숫자들을 가진 배열을 하나 정의해서두 배열의 차집합을 구하면 문제를 해결할 수 있을거라 생각하여다음과 같이 배열의 차집합을 구하는 코드를 만들어보았다.#define _CRT_SECURE_NO_WARNINGS#include int main() { int A[28]; int B[30]; int found; for (int i = 0; i 배열의 차집합을 구하는 알고리즘에 대하여 설명하자면첫 번째 배열(1~30을 모두 가지는 배열, B[30] ) 의 각 요소를 두 번째 배열(28개의 숫자를 가지는 배열 A[28] )의 모든 요소와 비교한다.첫 번.. 2024. 6. 21.
백준 10818번 최대,최소 문제에서의 VLA와 동적할당 이슈 다음 문제를 보고 바로 다음과 같이 코드를 짜서 돌렸더니 오류가 발생했다.#define _CRT_SECURE_NO_WARNINGS#include int main() { int N, X = 0; scanf("%d %d", &N, &X); int A[N]; for (int i = 0; i 그래서 오류를 확인해보니 배열 크기에 변수가 아닌 상수가 와야한다고 적혀있길래챗지피티에게 문제를 복사하여 물어보았더니 이게 무슨 일인가,나와 똑같이 답을 내준다. 그래서 혹시나하고 백준문제 제출을 하고 채점을 받아보니 정답이라고 나오길래 의아해 하던참에 검색해본결과컴파일러에 따라 VLA(가변 길이 배열)을 제공유무에 따라 오류가 생기거나 그렇지 않은것이었다.따라서 내가 쓰는 비주얼 스튜디오에서는 VLA.. 2024. 6. 20.
포인터 연습 예제3 (참조에 의한 호출, call-by-reference)(함수에서 2개 이상의 값 동시 반환) 함수 호출시 매개 변수를 통하여 외부로부터 데이터를 받는 방법은 크게 나누어서 두 가지가 있다.- 값에 의한 호출(call-by-value): 복사본이 전달된다.-참조에 의한 호출(call-by-reference): 원본이 전달된다.C에서는 값에 의한 호출만을 지원하지만, 포인터를 이용하여서 참조에 의한 호출을 간접 구현 가능하다.다음 기본 예시인 swap()함수를 사용해서 설명해보자. #include void swap(int x, int y);int main(){ int a = 100, b = 200; printf("a=%d b=%d\n", a, b); swap(a, b); //swap 함수 x와y에 각각 a와b값만을 복사하여 전달한다. printf("a=%d b=%d\n", a, b); return .. 2024. 6. 4.
포인터 연습 예제2 포인터 연산은 헷갈리기 쉬우므로 다음 예제를 통해 한번에 확실하게 구분해보자.#include int main(void){ int i = 10; int* pi = &i; printf("i=%d, pi=%p\n", i, pi); (*pi)++; // pi가 가리키는 대상(i 값)을 증가 printf("i=%d, pi=%p\n", i, pi); *pi++; // pi(주소)를 증가 (pi를 다음 int 위치로 이동) printf("i=%d, pi=%p\n", i, pi); *++pi; // pi를 증가시키고 (다음 int 위치로 이동), 그 위치의 값을 참조 (하지만 아무 연산도 수행하지 않음) printf("i=%d, pi=%p\n", i, pi); ++*pi; // pi가 가리키는 대상의 .. 2024. 6. 4.