donchanee

배열 문제 #5. 본문

프로그래밍/C언어

배열 문제 #5.

donchanee 2018. 5. 19. 21:46
728x90

 - 사용자에게서 입력받을 정수의 개수 N을 입력 받는다.  4≦N≦10 

 - 사용자에게서 정수 N 개를 입력 받아 배열 x[ ]에 저장하시오.

 - 배열에 저장된 입력받은 정수 중 두 번째로 큰 정수와 두 번째로 작은 정수를 출력하시오.


이 문제는 첫 번째로 큰 정수와 첫 번째로 작은 정수가 아닌 두 번째의 정수들을 출력하는 문제이다.


#include <stdio.h>


int main(void){

    

    int x[10], y[10], i, j, N;

    

    scanf("%d", &N);

    for(i=0;i<N;i++) {

        scanf("%d", &x[i]);

    }

    for(i=0;i<N;i++) {

        y[i]=0;

        for(j=0;j<N;j++) {

            if (x[i] < x[j])

                y[i]++;

        }

    }

    for(i=0;i<N;i++) {

        if ( y[i] == 1 ) {

            printf("%d\n", x[i]);

        }

        if ( y[i] == (N-2) ) {

            printf("%d", x[i]);

        }

    }

    

    return 0;

}



나는 이렇게 생각했었다. 하지만


N = 4 // 5 5 6 5 와 같은 예시에서는 5 5 5 가 출력되므로 오답인 것을 알 수 있다.


#include <stdio.h>


int main(void){

    

    int x[10], tmp, i, j, N;

    

    scanf("%d", &N);

    for(i=0;i<N;i++) {

        scanf("%d", &x[i]);

    }

    for (i=0; i<N; i++) {

        for (j=0; j<N; j++) {

            if( x[j] < x[j+1] ) {

                tmp = x[j];

                x[j] = x[j+1];

                x[j+1] = tmp;

            }

        }

    }

    

    printf("%d\n", x[1]);

    printf("%d\n", x[N-2]);

    

    return 0;

}


이 문제에 대한 답안은 이러하다.


배열을 이용해서 각각 자리의 크기 비교를 한다.


배열의 0번 자리에 가장 큰것을 배치하고 배열의 마지막 부분, 즉 N-1 번째 자리에 가장 작은 수를 배치하여


배열의 1번 부분과 배열의 N-2번 부분을 출력하면 그것이 두 번째 큰 수와 두 번째 작은 수임을 알수 있다. 


참신해. 내가 너무 어렵게 생각했었던걸까.

'프로그래밍 > C언어' 카테고리의 다른 글

배열 문제 #7.  (0) 2018.05.22
배열 문제 #6.  (0) 2018.05.20
배열 문제 #4.  (0) 2018.05.18
배열 문제 #3  (0) 2018.05.18
배열 문제 #2.  (0) 2018.05.18