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

# 풀이
배열의 개념을 알고 앞선 조건문 문제들을 잘 풀어냈다면 쉬운 문제다.
정답 소스코드를 확인해보기 전,
ios_base::sync_with_stdio(false);
cin.tie(NULL);
만약 이 두 코드에 대해 모르는 분이 있다면 아래 더보기를 펼쳐 문제를 풀고, 링크해둔 글들을 읽고 오길 권한다.
- 풀어볼 문제
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
- 읽어보면 좋은 글
글 읽기 - 추가 설명 및 다른 언어 빠른 입출력 방법
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
[백준] 15552번 : 빠른 A+B - [C++]
www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net
st-lab.tistory.com
그럼 이제 정말 정답 소스코드를 확인해보자.
#include <iostream> using namespace std; int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 cin.tie(NULL); // 입력과 출력 묶음 풀기 int n, x; cin >> n >> x; int a[n]; for(int i=0; i<n; i++){ cin >> a[i]; if(a[i] < x) cout << a[i] << ' '; } return 0; }
우선 첫째 줄에서 주어진 n과 x를 받아주고, 수열 a를 담을 1차원 정수배열을 만들어준다.
이때 크기는 n으로 설정해주면 0부터 n-1까지의 인덱스에 n개의 값이 들어갈 수 있다.
이후 for문을 통해 인덱스 값을 조정해주고, a[0]부터 a[n-1]까지 둘째 줄에서 주어진 정수 n개를 담아준다.
이때 정수를 담으면서 x와 값을 비교해주면 for문을 두 번 돌리지 않고도 x보다 작은 값들을 출력할 수 있다.
이렇게 하면 바로 끝나는 아주 간단한 코드다.
해당 코드로 답안을 제출했을 때 메모리와 시간을 확인해보자.
만약 앞서 언급한 빠른 입출력 처리를 해주지 않았더라면

시간이 400ms로 꽤 많이 차이가 난다.
앞으로 코드가 더 복잡해지고 길어진다면 이 차이는 계속해서 커질 것이다.
빠른 입출력에 대해 제대로 공부하고, 잘 활용해보도록 하자.
10871번: X보다 작은 수
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
www.acmicpc.net
'백준 > C++' 카테고리의 다른 글
[백준] 5597번: 과제 안 내신 분..? | C++ 풀이 (0) | 2023.05.12 |
---|---|
[백준] 10818번: 최소, 최대 | C++ 풀이 (0) | 2023.05.10 |
[백준] 25314번: 코딩은 체육과목 입니다 | C++ 풀이 (0) | 2023.05.08 |
[백준] 2480번: 주사위 세개 | C++ 풀이 (0) | 2023.05.06 |
[백준] 2525번: 오븐 시계 | C++ 풀이 (0) | 2023.05.05 |