문제 해결/BaekJoon
[백준] [C++] 2309번 일곱 난쟁이
WSLim_97
2023. 1. 12. 19:50
반응형
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
코드
#include <iostream>
using namespace std;
void Sort(int arr[], int count);
void DeleteValue(int arr[], int count, int sum);
const int COUNT = 9;
int main()
{
int input, sum = 0;
int arr[COUNT] = { };
for (int i = 0; i < COUNT; i++)
{
cin >> input;
arr[i] = input;
sum += input;
}
DeleteValue(arr, COUNT, sum);
Sort(arr, COUNT);
for (int i = 0; i < COUNT; i++)
{
if (arr[i] == 0)
continue;
cout << arr[i] << endl;
}
return 0;
}
void Sort(int arr[], int count)
{
for (int i = 0; i < count; i++)
{
int min = 101, minIndex = 0;
for (int j = i + 1; j < count; j++)
{
if (min > arr[j])
{
min = arr[j];
minIndex = j;
}
if (j == count - 1 && arr[i] > arr[minIndex])
{
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}
void DeleteValue(int arr[], int count, int sum)
{
sum -= 100;
for (int i = 0; i < count; i++)
{
for (int j = i + 1; j < count; j++)
{
if (arr[i] + arr[j] == sum)
{
arr[i] = 0;
arr[j] = 0;
return;
}
}
}
}
풀이
9명의 난쟁이의 키가 주어졌을 때 진짜 난쟁이 7명을 찾아 오름차순으로 정렬해 출력하는 문제이다.
일곱 난쟁이의 키의 합은 100이다. 이 조건으로 진짜 난쟁이 7명을 찾는다.
먼저 모든 난쟁이의 키를 더한 뒤 100을 뺀다. 그리고 그 값에 해당하는 몸무게 조합을 찾는 DeleteValue 함수를 작성했다.
DeleteValue 함수는 가짜 난쟁이를 찾아 그 값을 0으로 바꾸었다.
Sort 함수를 사용해 오름차순으로 정렬한 뒤 0이 아닌 값을 모두 출력하고 종료하였다.
반응형