15655_n&m(6)

이준혁·2025년 11월 28일

예제 입력 1
3 1
4 5 2
예제 출력 1
2
4
5

예제 입력 2
4 2
9 8 7 1
예제 출력 2
1 7
1 8
1 9
7 8
7 9
8 9

예제 입력 3
4 4
1231 1232 1233 1234
예제 출력 3
1231 1232 1233 1234

개념 정리

vector vec

  • C++ 에서 제공하는 정수형 동적 배열선언
  • 초기에는 크기가 0이고 필요한 순간 동적으로 크기 조절이 가능
  • 한줄이라고 생각하면 되는것 우리가 아는 배열 느낌으로

ios_base::sync_with_stdio(0)

  • C++의 iostream(cin, cout)과 C의 stdio(scanf, printf) 간의 동기화를 끄는 명령이
  • 이 작업으로 입출력 성능 최적화됨
  • scanf/printf와 섞어 쓰면 안됨 동기화가 꺼졌기 때문

nums.resize(N);

  • vector의 크기를 N만큼 변경(resize) 하는 명령어
  • SIZE을 지정하는 것
  • 정렬한후 순서대로 탐색

for (const int& v : vec)

  • 해당것은 cpp 기반 범위 기반 FOR문임
  • vec 내부의 원소를 앞에서부터 하나씩 순회

동일한 것

for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << ' ';
}

또는

for (int v : vec) { // 복사 발생
cout << v << ' ';
}

효율화 안전화 특면에서

for (const int& v : vec)

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int line, get_out;
vector<int> nums;
vector<int> vec;

void NM(int a, int start)
{
    if(a == get_out)
    {
        for(int i = 0; i < get_out; i++)
            cout << vec[i] << " ";
        cout << "\n";
        return;
    }

    for(int i = start; i < line; i++)
    {
        vec[a] = nums[i];
        NM(a + 1, i + 1);
    }
}

int main()
{
    ios_base::sync_with_stdio(0);

    cin >> line >> get_out;

    nums.resize(line);
    vec.resize(get_out);

    for(int i = 0; i < line; i++)
        cin >> nums[i];

    sort(nums.begin(), nums.end());

    NM(0, 0);
}
          
profile
#자기공부 #틀린것도많음 #자기개발 여러분 인생이 힘들다 하더라도 그것을 깨는 순간 큰 희열감으로 옵니다~

0개의 댓글