예제 입력까지는 확인했다.
등수를 어떻게 지정해야 될지 몰랐는데, 가만히 보니 정렬을 해서 순서를 정하면 되겠구나 싶었다.
그 중 제일 쉬운 버블정렬을 사용해, 제일 덩치가 큰 사람과 덩치가 작은 사람을 구분했다.
그런데 문제가, 이렇게 순서대로 정렬해봤자 등수를 구할 수 없을 뿐더러 어떻게든 구한다고 하더라도 출력할때는 내가 정렬한 대로 출력하면 안되고 입력값대로 해야하기 때문에 구글링을 해서 힌트를 얻었다.
#include <stdio.h>
int main()
{
int n;
int i,j;
int h[5];
int w[5];
int count;
//scanf("%d", &n);
n = 5;
i = 0;
/*
while(i < n)
{
scanf("%d", &h[i]);
scanf("%d", &w[i]);
i++;
}
*/
w[0] = 55, h[0] = 185;
w[1] = 58, h[1] = 183;
w[2] = 88, h[2] = 186;
w[3] = 60, h[3] = 175;
w[4] = 46, h[4] = 155;
int temp;
i = 0;
while(i < n - 1)
{
j = i + 1;
while(j < n)
{
if(h[i] < h[j] && w[i] < w[j])
{
temp = h[i];
h[i] = h[j];
h[j] = temp;
temp = w[i];
w[i] = w[j];
w[j] = temp;
}
j++;
}
i++;
}
i = 0;
count = 0;
while(i < n)
{
if (h[i] > h[i + 1] && w[i] > w[i + 1])
{
count++;
}
i++;
}
}
뭐 이런식으로 디버깅하면서 진행했는데, 답이 없었다.
정렬 한 후에 count로 등수를 세려고 하다가 검색을 해 수정했다.
#include <stdio.h>
int main()
{
int n;
int i, j;
int h[51];
int w[51];
int count;
scanf("%d", &n);
i = 0;
while (i < n)
{
scanf("%d", &h[i]);
scanf("%d", &w[i]);
i++;
}
i = 0;
while (i < n)
{
j = 0;
count = 0;
while (j < n)
{
if (h[i] < h[j] && w[i] < w[j])
{
count++;
}
j++;
}
i++;
printf("%d ", count + 1);
}
}
보면 이중반복문 구간에서 swap을 하지않고 바로 count(등수)를 셌다. 이걸 힌트로 봤었다.
그리고 바로 count + 1 (1등부터이므로) 로 출력..
힌트를 얻으니 너무 쉽게 풀렸는데 당시에는 생각이 안났다.
아이디어를 얻어가자.