[boj] c언어 - 10871번(X보다 작은 수)

peepeep_q·2022년 3월 22일
0

BOJ 문제풀이 - C언어

목록 보기
10/12
post-thumbnail

문제

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

입력

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

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

출력

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

풀이

생각해야 하는 문제 3개!
1- N개의 수열 입력받기
2- 입력받은 수열들을 X랑 비교하기
3- X보다 작은 수들 출력하기
라고 생각을 했기 때문에, 일단 수열을 입력받기 위해 배열을 선언한다. 그리고 for문을 이용해 n개의 수열을 입력받고 배열에 저장한다. 그 다음 if문을 넣어서 x랑 비교한 후 작은 수만 출력한다.

소스코드

#include <stdio.h>

int main()
{
    int n,x;
    scanf("%d %d\n", &n, &x);
    int num[n];
    for(int i=0; i<n; i++)
    {
        scanf("%d ", &num[i]);
        if(num[i]<x)
        {
            printf("%d ", num[i]);
        }
    }
    return 0;
}

메모

나는 이 문제에서 for문과 if문의 순서가 헷갈렸는데, 이게 헷갈려서 따로 for문을 만들기도 하고 if문을 밖으로 빼기도 하였다.

이 코드의 실행순서를 정리해보자면, for문에서 i=0으로 초기식이 성립되어 내려온 후 scanf로 수열의 첫번째 수를 입력받고 그 수를 num[0]으로 넣은 다음 if문으로 이어져 num[0]과 x를 비교하고 조건이 성립되면 printf한다. 이게 하나의 과정으로 다시 for문으로 올라가 i=1이 되고 이 과정들을 (n-1)번까지 반복한 후 끝난다.

간단하게 말하자면, for문 한번 돌릴때마다 그 안에 scanf와 if문이 차례로 한번씩 실행되고 다시 for-scnaf-if순서로 반복된다.

나는 for문과 if문을 합치니깐 순서가 잘 파악이 안되어 힘들었다. 처음에는 수열을 한번에 다 입력받고 나서 다시 그 수열 자체를 비교하는 코드를 짰었는데 자꾸 할수록 더 꼬이는 거 같아서 쉽게 생각하자!라는 마인드로 푸니깐 풀렸다...!

배열을 선언해서 만드는 것도 쉽게 생각하자! 문제 안에 답이 있다..!

근데 내가 잘 푼게 맞는지 확인하기 위해 구글링에 이 문제를 쳐보니깐 이것도 좀 복잡하게 푼 거 같다. 굳이 배열을 만들지 않고 그냥 수 하나 입력받고 비교하고 출력해도 될 거 같다. 하지만 나도 내 힘으로 풀어내서 뿌듯하다! ㅎㅎ

0개의 댓글

관련 채용 정보