ascode 1214 아스가르드의 전사들

2 분 소요

문제 설명

많은 전사들이 몹을 물리치며 살아가는 아스가르드 세계. 우리는 그 곳에서 전투력이 높은 전사들을 고렙이라 하고 전투력이 낮은 전사들을 저렙이라 부른다. 이 아스가르드 세계에는 던전들이 몇 군데의 영역으로 나눠져 있고 각 전사들은 자신들이 주로 가는 던전이 정해져 있다는 것을 알아냈다. 아스가르드 게임을 좋아하던 재훈이는 각 던전 별로 참여하고 있는 전사들의 레벨이 파악되었을 때 각 던전 별로 가장 레벨이 높은 전사와 가장 레벨이 낮은 전사를 알아낸 다음 그것들을 레벨 순으로 정렬하여 출력하는 프로그램을 작성하려고 한다. 재훈이를 도와 함께 프로그램을 작성해 보자.

입력 설명

맨 처음 테스트 케이스의 개수 T(1 <= T <= 5)를 입력 받는다. 그 뒤에 던전의 수(n)과 각 던전에 있는 전사의 수(m)을 입력 받는다(1 <= n <= 10, 2 <= m <= 10). 그 후 각 던전 별로 전사의 레벨 L[n][m]을 입력 받는다(1 <= L[n][m] <= 500). 각 영역은 줄 단위로 구분되고 각 전사의 레벨은 공백으로 구분된다.

출력 설명

각 테스트케이스마다 각 던전 별로 최고 레벨과 최저 레벨을 찾아 찾아진 모든 레벨을 내림차순으로 정렬된 값을 출력한다. (동일한 레벨이 중복되어 나올 수 있음을 유의하라.)

입력 예시

2
2 3
18 29 9
32 22 1
3 3
88 56 8
34 73 45
12 2 88

출력 예시

32 29 9 1
88 88 73 34 8 2

코드

#include <stdio.h>

//각각해주기 귀찮으니 전역변수 설정
int ar[501][501], result[1003];
int count, a, b, con = 0;
int i, j, temp;

void fix1() {
    //2차원 배열 버블함수로 정렬하기
    for (int c = 0; c < a; c++) {
        for (i = 0; i < b; i++) {
            for (j = 0; j < b - 1 - i; j++)
            {
                if (ar[c][j] < ar[c][j + 1]) {
                    temp = ar[c][j];
                    ar[c][j] = ar[c][j + 1];
                    ar[c][j + 1] = temp;
                }
            }
        }
    }
    //최하위 최상위 값 가져와서 1차원 배열에 귀속시키기
    con = 0;
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < b; j++)
        {
            if (j == 0 || j == b - 1) {
                result[con] = ar[i][j];
                con++;
            }
        }
    }

    //다시 1차원 배열에서 버블함수로 정렬하기
    for (i = 0; i < a*2; i++)
    {
        for (j = 0; j < a * 2 - 1 - i; j++)
        {
            if (result[j] < result[j + 1]) {
                temp = result[j];
                result[j] = result[j + 1];
                result[j + 1] = temp;
            }
        }
    }
}

int main() {

    scanf("%d", &count);
    for (int p = 0; p < count; p++)
    {
        //2차원 기본 정보를 입력하기
        scanf("%d %d", &a, &b);
        for (i = 0; i < a; i++)
        {
            for ( j = 0; j < b; j++)
            {
                scanf("%d", &ar[i][j]);
            }
        }

        //모든과정이 들어있는 함수
        fix1();
       
        //결과값을 출력하기
        for (i = 0; i < a*2; i++)
        {
            printf("%d ", result[i]);
        }
        printf("\n");
    }
    return 0;
}

나 : say

이것이 바로 버블함수의 절망편이란다.

댓글남기기