문제

로또 백준 6603

"맞았습니다" 코드

#include <bits/stdc++.h>
using namespace std;

int k, n;
vector<int> v;

void permu(){

  vector<int> tempv(k, 1); // k만큼 1 으로 초기화.
  for(int i = 0; i < 6; i++){ // 선택할 6개만 0으로 초기화
    tempv[i] = 0;
  } 
  do{
    for(int i = 0; i < tempv.size(); i++){
      if(tempv[i]==0){ // 선택한 6개만 출력 
        cout << v[i] << ' ';
      }
    }
    cout << '\n';
  }while(next_permutation(tempv.begin(), tempv.end()));
}

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  while(1){
    cin >> k;
    if(k == 0) break;
    v.clear();
    for(int i = 0; i < k; i++){
      cin >> n;
      v.push_back(n);
    }
    permu();
    cout << '\n';
  }
  return 0;
}

리뷰

STL next_permutation() 으로 풀었다.
k개 중에서 6개만 선택한 조합을 출력하는 문제다.

 

next_permutation()은 사전순으로 마지막인 숫자면 false를 반환해서 멈춘다. 

 

전체 길이 k가 8이면 반드시 6개만 선택해야 하니깐 0은 6개인 배열을 만든다.
그래서 벡터 tempv를 { 0,0,0,0,0,0,1,1 } 로 시작해야 한다.


0은 선택이고, 1은 선택안하는 것이다.

 

6개만 0으로 놓고 하면 되겠지 하고 짰는데
{1,1,0,0,0,0,0,0} 이렇게 시작해서 next_permutation()이 아예 동작을 안했었다.

마지막 조합 결과로 시작했기 때문이다.
이거 조심하기!!

728x90

'알고리즘 > 백준' 카테고리의 다른 글

계란으로 계란치기 백준 16987번 c++  (0) 2021.12.11
암호 만들기 백준 1759 c++  (0) 2021.12.11
N과M(9) 백준 15663번 c++  (0) 2021.12.10
하노이탑 이동 순서 백준 11729 c++  (0) 2021.12.09
곱셈 백준 1629번 c++  (0) 2021.12.08

+ Recent posts