알고리즘

백준 2309번 일곱난쟁이

이온시옥 2019. 3. 22. 21:07
반응형

//

//  2309_SevenDwarfs.cpp

//  2309_SevenDwarfs

//

//  Created by Eon on 3/22/19.

//  Copyright © 2019 Eon. All rights reserved.

//

/*

    https://www.acmicpc.net/problem/2309

    백준 2309번 일곱난쟁이

 

    브루트포스 유형의 문제

    모든경우의수를 모두 구하는 문제

        이중 for문 안에 for문이 하나더 존재하지만 이for문은 딱 한번만 실행되므로 O(N^2)

 

*/

#include <iostream>

#include <vector>

#include <algorithm>


using namespace std;


void printVectorDatasWithoutTwoIndexes(vector<int>& a_vector, int a, int b) {

    for (int i=0; i<a_vector.size(); i++) {

        if(i == a || i == b)

            continue;

        else

            cout << a_vector.at(i) << endl;

    }

}


int main(void) {

    const int n = 9; //난쟁이의 수.

    int sum = 0;

    vector<int> dwarfs; //난쟁이들의 키를저장하는 백터 생성.

    

    //1.입력받기

    int temp;

    for (int i=0; i<n; i++) {

        cin >> temp; //사용자로부터 난쟁이들의 키를 입력받음.

        dwarfs.push_back(temp); //vector에 넣음.

        sum += dwarfs[i]; //입력과 동시에 키의 TOTAL을 더하여 저장.

    }

    

    //2.정렬하기

    sort(dwarfs.begin(), dwarfs.end()); //오름차순 sort (default가 오름차순이므로 세번째 파라미터인 비교함수 필요없음.)

    

    //3.부루트포스(모든 경우의 수 계산)

    for (int i=0; i<n; i++) {

        for (int j=i+1; j<n; j++) {

            if(sum - dwarfs[i] - dwarfs[j] == 100) { //i, j인덱스를 뺴고 100으로 딱떨어진다면(정답을 찾음)

                printVectorDatasWithoutTwoIndexes(dwarfs, i, j); //두개 인덱스뺀 나머지 프린터하기

            }

        }

    }

    return 0;

}


간단 설명
배열을 사용하지 않고, 백터를 사용함.
마지막에 결과를 출력해주는 프린터함수를 그냥 가독성쉽게 할려고 함수로뺌.. 안빼고 구현해도 상관없음.
초딩대회문제라... 정말간단했음...
걍 이중반복문으로 모든경우의수 다 계산하는 식으로 품.


반응형