안경잡이 구루루

백준 10871 ( X 보다 작은 수) [ C programming ] 본문

C언어(C programming)/문제풀이(백준,BaekJoon)

백준 10871 ( X 보다 작은 수) [ C programming ]

구루루(gururu) 2020. 5. 26. 15:56
반응형


나:

#include <stdio.h>
#include <malloc.h>
int main() {
	int *Nlist,N, X;
	scanf("%d %d", &N, &X);
	Nlist = (int*)malloc(sizeof(int) * N);
	
	for (int i = 0; i < N; i++) {
		scanf("%d", (Nlist + i));
		if (Nlist[i] < X) printf("%d ",Nlist[i]);
	}
    return 0;
}

완성된 코드는 위와 같다.

 

#include <stdio.h>
#include <malloc.h>
int main() {
	int *Nlist,N, X;
	scanf("%d %d", &N, &X);
	Nlist = (int*)malloc(sizeof(int) * N);

어느정도 크기의 N을 받을지 모르기 때문에 사용자의 입력값에 따라 크기를 정해야 메모리 낭비를 줄일 수 있다. 

배열은 선언시 무조건 정수로 써야하기 때문에 변수를 사용할 수 있는 동적할당을 사용하기로 했다.

malloc 을 사용하기 위해서 #include 로 관련 해더파일( < malloc.h > )을 가져온다. 

scanf로 N과 X의 사용자 입력값을 받는다.

Nlist라는 포인터를 만들어 포인트 변수에 malloc의 sizeof 크기만큼 할당하고 메모리의 사용단위를 결정하지 않고 void* 형식으로 주소를 반환하기 때문에  형 변환( casting )을 통해서 (int * )로 주소를 반환.

이때 N의 개수에 따라 sizeof  크기를 할당한다.

 

	for (int i = 0; i < N; i++) {
		scanf("%d", (Nlist + i));
		if (Nlist[i] < X) printf("%d ",Nlist[i]);
	}
    return 0;
}

동적메모리 할당된 곳에 사용자 입력값을 받는다.

이때 i를 이용해 포인터 주소 연산방식을 사용해 int단위로 입력값을 받는다.

각 입력값이 X보다 작으면 출력하기 위해 if 구문을 사용했다. 또한 한칸씩 띄어서 출력하기 위해 %d 뒤 한칸을 띔


다른사람:

https://rightbellboy.tistory.com/74

#include <stdio.h>
 
int main() {
    int n, x;
    scanf("%d %d", &n, &x);
 
    int value;
    for (int i = 0; i < n; ++i) {
        scanf("%d", &value);
        if (value < x) printf("%d ", value);
    }
    return 0;
}

완성된 코드는 위와 같다.

배열로 다 받고나서 비교하지 않고 입력값을 받자마자 비교해 출력하는 방식을 이용할 수 있다.

 

    int value;
    for (int i = 0; i < n; ++i) {
        scanf("%d", &value);
        if (value < x) printf("%d ", value);
    }
    return 0;

value 라는 새로운 변수를 만들어 받은 사용자 입력값과 X 를 비교해 printf 해서 바로바로 출력한다. 

반응형