[알고리즘/백준] 10871번 :: X보다 작은 수 (C++)
문제 ✍🏻 :: [10871번] X보다 작은 수
(초록색 글자 클릭 시 문제로 이동)
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
알고리즘 (접근방법) 💻
배열 A에 입력받으면서 동시에 출력하는 문제는 아니다. A에 저장한 후, 비교하는 게 가장 이상적이라 생각한다. 그래서 필자의 경우, 배열을 사용하여 문제를 풀었다.
- 변수 정의, 배열 정의
- N과 X 입력받기
- 배열A를 입력받기
- 배열A 크기만큼 if문을 사용하여 X값과 비교하기
이런 구조로 생각하면 보다 쉬울 것이다.
🚨 참고 🚨
그냥 풀이 할 수 있지만,C와 C++의 표준 입출력 동기화를 끊어주는 방법으로 진행하였다. 이번 문제에서는 입력과 출력이 번갈아 반복되므로 cin.tie(NULL)
도 함께 써준다.
자세한 설명은 15552번 풀이에 나와있다. (15552에 대한 설명 바로가기)
💡전체 코드💡
#include <iostream>
using namespace std;
int main()
{
cin.tie(NULL); //묶음해제
ios_base::sync_with_stdio(false); //동기화해제
int N, X, i;
//(1 ≤ N, X ≤ 10,000)이므로 배열크기도 N의 범위까지인 10,000
int arrA[10000];
cin >> N >> X;
//N만큼의 크기인 배열 A 입력받기
for (i = 0; i < N; i++) {
cin >> arrA[i];
}
//배열 A출력하기 위한 for문
for (i = 0; i < N; i++) {
//배열 A[0]~[N]까지 X보다 작은지 비교
if ( arrA[i] < X ) {
//공백과 함께 출력!
cout << arrA[i] << " ";
}
}
return 0;
}
🚨컴파일 에러🚨
초반에 이렇게 런타임에러가 계속됐다. 런타임에러의 원인은 OutOfBounds
OutOfBounds : 컨테이너 또는 배열에서 할당된 경계를 넘어가는 접근 발생
이걸 보고 1000이었던 배열크기가 너무 컸나 싶어 점차점차 10단위로 줄여나갔는데도 런타임에러는 해결되지 않았다. 무엇이 문제였던걸까?
🧯💨문제를 잘 읽어야 하는 이유
런타임에러의 원인은 배열의 크기였다. 예시에서 10개를 했으니까 크기를 10으로 해야하나? 1000은 너무 큰가? 100으로 줄일까? 이런 나의 '주관적인' 생각으로 결정할 게 아니었다.
힌트는 문제 속에 있었다.
정수 N개로 이루어진 수열 A. (1 ≤ N, X ≤ 10,000)
수열 A, 즉 배열의 크기는 입력받은 N이었다. N은 1부터 10,000까지므로, 배열의 크기는 10,000으로 수정해줘야 한다. 수정하고 혹시나 했는데 바로 정답이었다.
회고 🤔
- 배열을 쓰는 문제가 맞나? 아리쏭했다. 이 문제는 for문 파트인데 배열을 안 쓰고 어떻게 할까?
그런데 어떤 문제든 겹칠 수 밖에 없다. 입출력에서도 if문이 나올 수도 있는 것. 그러니까 너무 단정지어서 국소적으로 생각하지말자. - 배열의 크기는 내 맘대로 정하지말고, 문제의 힌트에서 꼭 확인하자!
- 오늘부로 for문 부분도 끝이 났다!!! 기분이가 좋다.
Reference
Author And Source
이 문제에 관하여([알고리즘/백준] 10871번 :: X보다 작은 수 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiingirok/알고리즘백준-10871번-X보다-작은-수-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)