[백준 10871번] X보다 작은 수 C++ 풀이

문제

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

입력

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

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

출력

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

내 풀이


#include<bits/stdc++.h>

using namespace std;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int n(0), x(0), input(0);
	vector<int> arr(0);
	
	cin >> n >> x;
	for (int i = 0; i < n; i++) {
		cin >> input;
		arr.push_back(input);
	}
	for (int i = 0; i < n; i++) {
		if (arr.at(i) < x) cout << arr.at(i) << " ";
	}
  return 0;
}


vector 쓸 땐 push_back()과 at등 함수를 사용해야 한다.

더 좋은 듯한 풀이1

#include<bits/stdc++.h>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, x;
	cin >> n >> x;
	int* a = new int[n];
	for (int i = 0; i < n; i++)
		cin >> a[i];
	for (int i = 0; i < n; i++) {
		if (a[i] < x) cout << a[i] << ' ';
	}
	delete[] a;
}

배열을 동적할당하여 + delete까지 함

더 좋은 듯한 풀이2

#include<bits/stdc++.h>

using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, x, t;
	cin >> n >> x;
	while (n--) {
		cin >> t;
		if (t < x) cout << t << ' ';
	}
}

그냥 입력을 받아서 n보다 작으면 바로 출력, 아니면 버림