https://www.acmicpc.net/problem/2309
코드 (C)
#include <stdio.h>
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
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 = 0; j < 8 - i; j++)
{
if (arr[j] > arr[j + 1]) swap(&arr[j], &arr[j + 1]);
}
}
for (int i = 0; i < 8; i++)
{
for (int j = i + 1; j < 9; j++)
{
if ((sum - arr[i] - arr[j]) == 100)
{
for (int k = 0; k < 9; k++)
{
if (k == i || k == j) continue;
printf("%d\n", arr[k]);
}
return 0;
}
}
}
return 0;
}
코드 (C++)
#include <iostream>
using namespace std;
void swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int arr[9], sum = 0;
for (int i = 0; i < 9; i++)
{
cin >> arr[i];
sum += arr[i];
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8 - i; j++)
{
if (arr[j] > arr[j + 1]) swap(&arr[j], &arr[j + 1]);
}
}
for (int i = 0; i < 8; i++)
{
for (int j = i + 1; j < 9; j++)
{
if ((sum - arr[i] - arr[j]) == 100)
{
for (int k = 0; k < 9; k++)
{
if (k == i || k == j) continue;
cout << arr[k] << "\n";
}
return 0;
}
}
}
return 0;
}
코드설명
아홉 난쟁이들의 키를 입력받으며 더해나간다.
버블정렬을 통해 오름차순으로 정렬한다.
중첩반복문을 돌면서 모든 조합을 검사한다.
이때 sum-arr[i]-arr[j] == 100 이라면 바로 i,j 인덱스를 제외한 모든 인덱스를 출력하고 프로그램을 종료한다.
느낀 점
처음에는 어떻게 풀어야할지 감이 안 잡혔는데, 9명 중 7명을 고르는 것이 아니라 아닌 2명을 찾으면 된다는 것을 알고 바로 풀었다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C & C++] 11047 동전 0 (0) | 2022.08.29 |
---|---|
[백준/C & C++] 4948 베르트랑 공준 (0) | 2022.08.29 |
[백준/C & C++] 1929 소수 구하기 (0) | 2022.08.26 |
[백준/C & C++] 1978 소수 찾기 (0) | 2022.08.26 |
[백준/C & C++] 1037 약수 (0) | 2022.08.26 |