본문으로 바로가기

백준 일곱난쟁이

category 프로그래밍 언어/알고리즘 2019. 2. 19. 21:53
시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 128 MB 20206 9766 7576 51.555%

문제

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌

 아홉 명이었던 것이다.

아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 

다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.

아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

입력

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 

정답이 여러 가지인 경우에는 아무거나 출력한다.

출력

일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

예제 입력 1 

20
7
23
19
10
15
25
8
13

예제 출력 1 

7
8
10
13
19
20
23

이 문제를 접근 한 저의 방법은 우선 각 9명의 난장이의 키를 다 더해줍니다. 위 예시로 들자면 140이 나올겁니다.

 

7명의 난쟁이의 합이 100이 되어야 하므로 9명중 2명을 택했을 경우 키가 40인 경우 이 두명을 제거해야합니다.

 

즉 9명 중에 나머지 2명의 키의 합은 100=전체 키의 합 - 난쟁이 2명의 키 합 이여야 합니다.

 

쉽게 말해서 전체 키 합 중 100을 만족하기 위해 알맞은 값을 가진 두명의 난쟁이를 제거해주면 됩니다.

 

이를 위해서 우선 더해주고 for문으로 난쟁이들의 키를 1번째 요소를 선택 후 나머지 2~9번째 난쟁이 키를 합하여 만족하는 값을 

 

찾을 때 이를 출력해주면 됩니다. 

 

즉 for문으로 i=0부터 시작하여 다음 이중 포문에서는 j=1부터 해서 9까지 쭈욱 돌리면서 확인해보면 되겠죠.

 

그리고 for문 들어가기 전에 값을 오름차순으로 정렬 후 들어가면 마지막 출력 때 정렬 따로 할 필요 없이 출력해주면 됩닙다.

 

삽입정렬을 이용하였습니다.

 

#include <stdio.h>

#include <stdlib.h>

void InserSort(int arr[], int n)

{

 int i, j;

 int insData;



 for (i = 1; i < n; i++)

 {

 insData = arr[i];   // 정렬 대상을 insData에 저장



 for (j = i - 1; j >= 0; j--)

 {

 if (arr[j] > insData)

 arr[j + 1] = arr[j];    // 비교 대상 한 칸 뒤로 밀기

 else

 break;   // 삽입 위치 찾았으니 탈출!

 }



 arr[j + 1] = insData;  // 찾은 위치에 정렬 대상 삽입!

 }

}

int main()

{

 int small[9] = { 0 };

 int i, j,k,total = 0;

 int sub = 0;

 for (i = 0; i < 9; i++)

 {

 scanf_s("%d", &small[i]);

 total += small[i];

 }



 sub = total - 100;

 InserSort(small, 9);

 for (i = 0; i < 9; i++)

 {

 for (j = i + 1; j < 9; j++)

 {

 if (small[i] + small[j] == sub) {



 for (k = 0; k < 9; k++)

 {

 if (k == i || k == j)

 continue;

 printf("%d\n", small[k]);

 }

 }

 }

 }

 return 0;

}

 

'프로그래밍 언어 > 알고리즘' 카테고리의 다른 글

백준 소수찾기  (0) 2019.02.19
백준 설탕배달  (0) 2019.02.17
백준 보물문제 풀이  (0) 2019.02.17
숫자 순환 알고리즘  (0) 2019.01.04
쉬운 농부 알고리즘  (2) 2018.09.24