본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 3008 : 일곱 난쟁이 C언어

by starfish22 2022. 1. 29.
728x90

▶문제 : 일곱 난쟁이 (codeup.kr)

 

일곱 난쟁이

아홉 개의 줄에 걸쳐 일곱 난쟁이의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러가지인 경우에는 아무거나 출력한다.

codeup.kr

 

▶코드 작성

#include <stdio.h>

int main()
{
    int arr[9], sum = 0;
    for (int i = 0; i < 9; i++) {
        scanf("%d", &arr[i]);
        sum += arr[i];//모든 값의 합 구하기
    }

    for (int i = 0; i < 8; i++)
    {
        for (int j = i + 1; j < 9; j++)
        {
            if (sum - arr[i] - arr[j] == 100)//배열 자리 i, j의 값을 빼서 100이 되면
            {
                arr[i] = arr[j] = 0;//그 자리의 값을 0대입
                break;
            }
        }
        if (arr[i] == 0) break;//0이 되었을 때 종료
    }

    for (int i = 0; i < 8; i++)//선택 정렬
    {
        int min = i;
        for (int j = i + 1; j < 9; j++)
        {
            if (arr[min] > arr[j]) min = j;
        }
        if (i != min)
        {
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }

    for (int i = 2; i < 9; i++) {//0을 제외한 값 출력
        printf("%d\n", arr[i]);
    }

    return 0;
}

 

▶해석

값을 입력받을 때 sum변수로 모든 값의 합을 구한다. 이중 for문으로 모든 구역에서 2개의 값을 골라 sum에서 빼보아 100이 나오는지 확인하였다. 100이 나오면 그 뺐던 값을 0으로 해주어 종료하였다.

마지막으로 선택 정렬을 하고 작은 수 중 0이 두 번 있으니 i=2부터 출력해주었다.

728x90

댓글