백준 #27 [C++] 10871. X보다 작은 수, 배열의 선언과 초기화

16543 단어 백준CbojC

❔문제: 백준10871

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

➡️입력

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

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

⬅️출력

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

예제 입력 1

10 5
1 10 4 9 2 3 8 5 7 6

예제 출력 1

1 4 2 3

풀이

C 코드

1번째 제출(컴파일 에러)

#include <stdio.h>
int main() {
    int N, X;
    scanf("%d X", &N, &X);
    for (int i=0; i<N; i++)
        scanf("%d ", &A[i]);
    for (int i=0; i<N; i++){
        if A[i]<X
            printf("%d ", A[i]);
    }
    return 0;
}
  • scanf문에서 무슨 생각으로 "%d X"라 쓴 거지;;
    잠이 덜 깼나 오늘 아침 이런 실수들 유난히 많다ㅋㅋㅠㅠㅠ
  • 글구 A배열은 선언도 안 한 채 사용하려다 여기서도 에러
  • if문 조건 () 반드시 쳐줘야 되는구나..
    C 배울 때도 살짝 헷갈렸던 기억이 있는데 이번에 제대로 기억하고 가자

2번째 제출(컴파일 에러)

#include <stdio.h>
int main() {
    int N, X, A[];
    scanf("%d %d", &N, &X);
    for (int i=0; i<N; i++)
        scanf("%d ", &A[i]);
    for (int i=0; i<N; i++){
        if(A[i]<X)
            printf("%d ", A[i]);
    }
    return 0;
}

위에서 에러난 건 다 고쳐줬다 생각했는데
배열 선언에서 A 사이즈를 지정해주지 않아 또 컴파일 에러🥲
배열 선언 방법 배울 때 여러 가지 방법 배웠었는데 이것도 가물가물하다.
이 기회에 강의자료 찾아서 정리해야지(밑에 정리해둠!)

3번째 제출(맞음)

#include <stdio.h>
int main() {
    int N, X;
    scanf("%d %d", &N, &X);
    int A[N];
    for (int i=0; i<N; i++)
        scanf("%d ", &A[i]);
    for (int i=0; i<N; i++){
        if(A[i]<X)
            printf("%d ", A[i]);
    }
    return 0;
}

정수 N값 받은 후에 배열 선언하는 걸로 살짝 수정
이제 잘 돌아간다.
배열 선언 시 꼭 크기 지정해주기!

C++ 코드

1번째 제출(컴파일 에러)

#include <iostream>
using namespace std;
int main() {
    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;
}

if문에서 에러~
생각 없이 기억에 의존해서 대충 짜면 이런 실수를 하게 된다....ㅎ
생각하면서 코드 짜고 변수 사용 범위 유의하자!!!

#include <iostream>
using namespace std;
int main() {
    int N, X;
    cin >> N >> X;
    int A[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] << ' ';
    }
    return 0;
}

☑️배열

배열의 선언

  • 배열 역시 변수이기 때문에 반드시 사용 전 선언해줘야 함
  • 배열 선언 방법: 변수 이름 뒤에 대괄호[ ]를 이용해 크기 지정
  • 배열의 크기는 반드시 양의 정수
    형식: 자료형 배열이름[배열크기]; ex. int s[10];
    지정된 자료형과 크기를 가지는 배열이 생성됨

배열의 초기화

  • 배열은 선언과 동시에 초기화(특정 값을 넣어줌)가 가능
    ex. int scores[5] = {10, 20, 30, 40, 50};

  • 배열을 초기화하려면 값들을 콤마로 분리해 중괄호{ }로 감싼 후,
    배열을 선언할 때 값을 대입해주기
    ex. int scores[5] = {10, 20, 30};
    -> 값을 생략한 부분은 자료형의 기본값으로 초기화됨!
    (여기선 배열의 자료형이 int이므로 int의 기본값 0으로 배열의 4,5번째 값이 초기화)

  • 배열의 크기가 주어지지 않으면 자동으로 초기값 개수만큼이 배열 크기로 잡힘. 배열을 초기화하는 가장 일반적인 방법
    ex. int scores[] = {10, 20, 30, 40, 50};
    -> 배열 scores의 크기는 5

  • 초기값이 주어지지 않으면 일반 변수와 마찬가지로 아무 의미 없는 쓰레기값(garbage)이 들어감
    ex. int scores[5];
    -> 이렇게 배열을 선언만 하면 각 요소에 쓰레기값이 저장됨

배열 초기화 시 주의사항

  1. 초기화 시 중간 요소의 값이 생략되면 오류 발생
    int engScore[5] = {90, 100, , 85, 70};
    int engScore[5] = {90, 100, 80 , 85, 70};

  2. 배열 크기 지정하지 않은 경우 반드시 초기화시켜야 함‼️
    int engScore[];
    int engScore[] = {●●●};

  3. 중괄호를 이용해 배열에 값을 저장하는 건 초기화 시에만 가능
    int engScore[5]; engScore[5] = {90, 100, 80, 85, 70};
    engScore[5] = {90, 100, 80, 85, 70};
    즉, 초기화는 배열 선언과 동시에 해줘야!

좋은 웹페이지 즐겨찾기