ascode 1301 아스가르드의 전사들 #2

2 분 소요

문제 설명

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

입력 설명

맨 처음 테스트 케이스의 개수 T(1 ≤ T ≤ 10)를 입력 받는다.
그 뒤에 던전의 수(n)과 각 던전에 있는 전사의 수(m)을 입력 받는다(1 ≤ n ≤ 12, 2 ≤ m ≤ 15). 그 후 각 던전 별로 전사의 레벨을 입력 받는다(1 ≤ level[i][j] ≤ 500).
각 던전은 줄 단위로 구분되고 각 전사의 레벨은 공백으로 구분된다. 즉, 각 테스트 케이스의 i번째 줄의 j번째 숫자는 i번째 층의 j번째 전사의 레벨을 의미한다.

출력 설명

p> 각 테스트 케이스마다 모든 던전에서의 최고 레벨과 최저 레벨을 찾아 첫 줄에 출력하고, 각 던전 별로 최고 레벨을 찾아 찾아진 모든 레벨을 오름차순으로 정렬된 값을 다음 줄에 출력한다.

(동일한 레벨이 중복되어 나올 수 있음을 유의하라.)

입력 예시

2
3 3
18 29 9
32 22 1
23 45 59
4 5
98 96 118 132 344
134 273 145 120 220
172 456 188 330 289
288 499 141 299 399

출력 예시

59 1
29 32 59
499 96
273 344 456 499

#코드

#include <stdio.h>
 
//각각해주기 귀찮으니 전역변수 설정
int ar[501][501], result[1003], tt[100];
int count, a, b, con = 0;
int i, j, temp,as = 0;
 
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();
        
        //결과값을 출력하기1
        for (i = 0; i < a*2; i++)
        {
            if(i == 0 || i == (a*2)-1){
              printf("%d ", result[i]);   
            }
        }
        //결과값을 출력하기2
        printf("\n");
        for (i = 0; i < a; i++)
        {
           tt[i] = ar[i][0];
        } 
         
            for(int i = 0; i < a - 1; i++)
        {
            for(int j = 0; j < a -1 -i; j++)
            {
                if(tt[j + 1] < tt[j])
                {
                    as = tt[j];
                    tt[j] = tt[j + 1];
                    tt[j + 1] = as;
                }
            }
        }
              for (i = 0; i < a; i++)
        {
           printf("%d ", tt[i]);
        } 
        printf("\n");
    }
    return 0;
}

댓글남기기