cyphen156

백준-1차원 배열 10871 X보다 작은 수 본문

컴퓨터공학/알고리듬 풀이

백준-1차원 배열 10871 X보다 작은 수

cyphen156 2024. 9. 9. 14:32

10871번: X보다 작은 수 (acmicpc.net)

 

N개로 이루어진 수열 A, X를 주었을 때 수열 안에서 X보다 작은 수를 모두 출력하라.

제약사항

  • 0 < N, X <= 10,000
  • 0 < result <= N

주의 사항

수를 입력받은 순서대로 공백을 주어 출력한다.

--> 정렬 안한다.

----> 브루트 포스 식으로 순열 전체를 순회해야한다.

C 풀이

X보다 작은 수 _10871.c

C언어로 풀 때에는 메모리 사이즈에 항상 주의하면서 풀어야 한다.

0으로 초기화한 결과 배열을 하나 복제해놓고, 수열 입력시 바로 X와 비교하여 result배열안에 집어넣음으로써 전체 순회를 한번 더 수행하지 않고, 결과배열이 0이 아닐 때까지만 순회하여 출력하게 만듦으로써 최적화 해 보았다.

/**
* 백준 1차원 배열 10871
* 정수 N개로 이루어진 수열 A와 X를 주었을 때 X보다 작은 수를 모두 출력하라.
* 
* 제한사항
*****************************************
* 0 < N, X <= 10,000                   *
* 0 < result <= N                       *
*****************************************
*
*
*
* 주의
* 수를 입력받은 순서대로 공백을 주어 출력한다
* --> 정렬 안한다.
* ----> 브루트 포스식으로 전체를 순회해야한다.
*
* 풀이시간 10분
*/
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int N, X;
    scanf("%d %d", &N, &X);
    
    if (N > 10000)
    {
        return-1;
    }
    int* arr = (int*)malloc(N * sizeof(int));
    int* result = (int*)calloc(N, sizeof(int));
    int T = 0;
    for (int i = 0; i < N; ++i)
    {
        scanf("%d", &arr[i]);
        if (arr[i] < X)
        {
            result[T] = arr[i];
            ++T;
        }
    }
    for (int i = 0; result[i] != 0; ++i)
    {
        printf("%d ", result[i]);
    }
    printf("\n");
    free(arr);
	return 0;
}

C++ 풀이

X보다 작은 수 _10871.cpp

new delete 동적할당 연습

Vector STL사용

/**
* 백준 1차원 배열 10871
* 정수 N개로 이루어진 수열 A와 X를 주었을 때 X보다 작은 수를 모두 출력하라.
* new delete 연산을 통한 동적 할당 연습 
*
* 제한사항
*****************************************
* 0 < N, X <= 10,000                   *
* 0 < result <= N                       *
*****************************************
*
*
*
* 주의
* 수를 입력받은 순서대로 공백을 주어 출력한다
* --> 정렬 안한다.
* ----> 브루트 포스식으로 전체를 순회해야한다.
*
* 풀이시간 10분
*/
#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    int N, X;
    cin >> N >> X;

    int* arr = new int[N];
    vector<int> result;
    for (int i = 0; i < N; ++i)
    {
        cin >> arr[i];
        if (arr[i] < X)
        {
            result.push_back(arr[i]);
        }
    }
    for(int i = 0; i < result.size(); ++i)
    {
        cout << result[i] << " ";
    }
    cout << endl;
    delete[] arr;
    return 0;
}

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com