[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문을 돌아 처음부터(정렬되었기 때문에 가능하다) 찾은 두 수를 제외하고 출력한다.

정답이 여러가지인 경우 하나만 출력하면 되기 때문에 출력이 끝나면 종료시킨다.

좋은 웹페이지 즐겨찾기