킵고잉

백준 알고리즘 10871번: X보다 작은수 본문

백준 알고리즘

백준 알고리즘 10871번: X보다 작은수

여의도비 2018. 7. 4. 19:47

오늘은 10871번을 풀어보기로 했다. 문제는 아래와 같다.



문제

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이 때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.





자 문제는 어렵지 않다! 처음에는 c++ 함수에만 익숙한터라 배열을 이용하여 풀어 냈다.




#include <stdio.h>

using namespace std;

int main() {

int a = 0 , b = 0, c[10000] = 0;

scanf("%d %d", &a, &b);

for(int i = 0; i < a; i++){

scanf("%d", &c[i]);

if(c[i] < b){

printf("%d ", c[i]);

}

}

return 0;

}

이렇게 배열을 이용해서 수를 저장한 후에 다시 배열을 이용하는 방법을 사용했었다. 하지만 내가 지금 작성한 알고지름에서는 굳이 배열을 쓸 필요가 없다는 조언을 받앗다 . "저장해서 나중에 쓰는게 아니라 바로 사용하는데 굳이 배열을 이용하면서 까지 메모리를 사용해야하는가 ? " 그래서 아직은 머리로 쉽게 이해가 되지는 않았지만 그냥 c를 배열이 아니라 정수로 선언해보았다.




















#include <iostream>

#include <stdio.h>

using namespace std;




int main() {

int a = 0 , b = 0, c = 0;

scanf("%d %d", &a, &b);

for(int i = 0; i < a; i++){

scanf("%d", &c);

if(c < b){

printf("%d ", c);

}

}

return 0;

}


결과는 똑같았다. 왜인지 다시 곰곰히 생각을 해보니 c에는 당연히 먼저 우리가 입력한 숫자가 들어갈 것이고 들어간다음 코드에 따라서 바로 기준이 되는 수와 비교를 해서 작다면 출력할 것이고 크다면 바로 걸러내니깐 말이다. 결국 이렇게 다시한번 코드 메모리를 조금 더 작게! 이용 할수 잇다는 걸 느꼈다

Comments