백준 2309 일곱 난쟁이

2023. 7. 16. 12:06코딩 공부 연습

반응형

쉬운 문제부터 백준 codeplus 문제집을 차례로 풀어보려고 한다.

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
  vector<int> arr;
  for (int i = 0; i < 9; i++)
  {
    int tmp;
    cin>>tmp;
    arr.push_back(tmp);
  }
  sort(arr.begin(), arr.end());

  for (int i = 0; i <9; i++)
  {
    for (int j = i+1; j < 9; j++)
    {
      int sum = 0;
      for (int k = 0; k < 9; k++)
      {
        if (k != i && k != j)
          sum += arr[k];
      }
      if (sum == 100)
      {
        for (int idx = 0; idx < 9; idx++)
        {
          if (idx != i && idx != j)
            cout<<arr[idx]<<"\n";
        }
        return 0;
      }
    }
  }
  return 0;
}

난쟁이 수가 9명 밖에 되지 않기에 다중 for문을 마구 사용했다. 

9명 중 2명을 빼고 그 키의 합을 계산해 100이 되는 경우만 찾으면 되기 때문에 2명을 고르는 작업부터 진행한다.

 

남들은 어떻게 짰는지 보고 수정해 보았다.

 

굉장히 멍청한 방식으로 풀었단걸 알았다. 9명의 합을 다 구해두고, 제외시킬 두 난쟁이의 키만 빼주었을 때 100이 되면 답니다ㅋㅋㅋ

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>

using namespace std;

int main()
{
  vector<int> arr;
  int sum_all = 0;
  for (int i = 0; i < 9; i++)
  {
    int tmp;
    cin>>tmp;
    sum_all+=tmp;
    arr.push_back(tmp);
  }
  sort(arr.begin(), arr.end());

  for (int i = 0; i <9; i++)
  {
    
    for (int j = i+1; j < 9; j++)
    {
      if (sum_all - arr[i] - arr[j] == 100)
      {
        for (int idx = 0; idx < 9; idx++)
        {
          if (idx != i && idx != j)
            cout<<arr[idx]<<"\n";
        }
        return 0;
      }
    }
  }
  return 0;
}

더 간략하게 작성할 수 있다.

'코딩 공부 연습' 카테고리의 다른 글

백준 10972 다음 순열, 이전 순열, 모든 순열  (0) 2023.07.20
백준 NM과 K(1)  (0) 2023.07.19
백준 18870 좌표 압축  (0) 2023.06.23
백준 1920 수 찾기  (0) 2023.06.22
백준 1057 토너먼트  (1) 2023.06.20