[C언어] 백준 7568 : 덩치

mainsain·2022년 3월 16일
0

백준

목록 보기
15/64

내가 이해한 방법

예제 입력까지는 확인했다.

등수를 어떻게 지정해야 될지 몰랐는데, 가만히 보니 정렬을 해서 순서를 정하면 되겠구나 싶었다.

그 중 제일 쉬운 버블정렬을 사용해, 제일 덩치가 큰 사람과 덩치가 작은 사람을 구분했다.

그런데 문제가, 이렇게 순서대로 정렬해봤자 등수를 구할 수 없을 뿐더러 어떻게든 구한다고 하더라도 출력할때는 내가 정렬한 대로 출력하면 안되고 입력값대로 해야하기 때문에 구글링을 해서 힌트를 얻었다.

내가 푼 방법(틀림)

#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등부터이므로) 로 출력..
힌트를 얻으니 너무 쉽게 풀렸는데 당시에는 생각이 안났다.
아이디어를 얻어가자.

profile
새로운 자극을 주세요.

0개의 댓글