[C++] 백준 2309 : 일곱 난쟁이
#include <iostream>
#include <algorithm> // sort
using namespace std;
int arr[9] = {0};
int sum;
int main(int argc, char** argv){
for(int i = 0; i < 9; i++){
scanf("%d", &arr[i]);
sum += arr[i];
}
sort(arr, arr + 9);
int ans = sum - 100;
for(int i = 0; i < 9; i++){ // 브루트포스
for(int j = i; j < 9; j++){
if(arr[i] + arr[j] == ans){
for(int k = 0; k < 9; k++){
if(k != i && k != j){
printf("%d\n", arr[k]);
}
}
return 0; // 하나만 출력
}
}
}
return 0;
}
- 꼭 vector를 써야 정렬할 수 있는 것은 아니다. 항상 sort를 썼을 때 vector만 이용해서 그냥 배열도 정렬할 수 있나 시도해봤는데 가능했다. 종종 사용해야겠다.
브루트포스 연습용 문제.
9개 중 7개를 전부 찾는 것은 힘들다고 생각했다. 때문에 합이 100이 되는 것을 찾기 위해서는 역설적으로 2개를 빼서 100이 되는 경우를 찾아야한다고 생각했다.
브루트포스 알고리즘을 사용해서 for문 2개로 돌아가며 2개를 찾는다. 만약 둘을 빼서 100이 된다면 for문을 돌아 처음부터(정렬되었기 때문에 가능하다) 찾은 두 수를 제외하고 출력한다.
정답이 여러가지인 경우 하나만 출력하면 되기 때문에 출력이 끝나면 종료시킨다.
Author And Source
이 문제에 관하여([C++] 백준 2309 : 일곱 난쟁이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-2309-일곱-난쟁이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)