ascode 1301 아스가르드의 전사들 #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;
}
댓글남기기