happy318
팽도리블로그
happy318
전체 방문자
오늘
어제
  • 전체글 (252)
    • 공부 (5)
      • Algorithm 정리 (0)
      • 논문리뷰 (1)
      • C++ (2)
      • Python (2)
      • Java (0)
      • Back-end (0)
      • Front-end (0)
      • Embedded (0)
    • 코딩테스트 (218)
      • Python 문제풀이 (100)
      • C++ 문제풀이 (108)
      • Python template (9)
      • C++ template (1)
    • 일상 (20)
      • 맛집 (13)
      • 쇼핑 (5)
      • 아무 일상 (2)
    • 게임 (9)
      • 메이플스토리 (9)

최근 글

인기 글

hELLO · Designed By 정상우.
happy318

팽도리블로그

코딩테스트/C++ 문제풀이

[백준] 로또

2023. 3. 26. 20:53

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

 

6603번: 로또

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

www.acmicpc.net

우선 문제부터 간단하게 요약하면, 

 

k 값과 k개의 숫자가 주어지면 여기에서 6개를 뽑는 가짓수를 사전순으로 출력해야 하는 문제입니다.

 

<Solution>

기본적인 combination문제이므로 뽑거나 뽑지 않거나를 dfs를 사용하여 구현하면 됩니다.

 

아래의 풀이에서 추가해도 되는 부분은, 만약 남은 것들을 모두 뽑아도 6개를 뽑지 못하는 경우 더이상 상태 발전을 하지 않도록 구현이 가능할 듯 합니다. 하지만 이 부분을 넣지 않아도 충분히 통과 할 수 있으므로, 넣지 않은 구현은 아래와 같습니다. 

(사전순 정렬은 처음 input을 사전순으로 받고, 고르는 것이 먼저 진행되므로 자연스럽게 정렬하지 않아도 사전순으로 출력됩니다.)

#include <iostream>
#include <vector>

using namespace std;

vector<int> lottoAns;
int k;

void solve(int *arrayPtr, int index, int curCnt){
    // when will it end
    if(curCnt == 6){
        for(auto& k:lottoAns){
            cout << k << ' ';
        }
        cout << '\n';
        return;
    }
    if(index == k) return; // out of range
    // select
    lottoAns.push_back(*(arrayPtr+index));
    solve(arrayPtr, index+1, curCnt+1);
    lottoAns.pop_back();
    // doesn't select
    solve(arrayPtr, index+1, curCnt);
    // since lottoAns always empty we don't have to initialize it every time
}

int main(){
    
    while(1){
        cin >> k;
        if(!k) break;

        int kArray[15];
        for(int i = 0; i<k; i++){
            cin >> kArray[i];
        }
        solve(kArray, 0, 0);
        cout << '\n';
    }
    return 0;
}
반응형

'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글

[백준] 부분수열의 합  (0) 2023.04.14
[백준] 부분수열의 합  (0) 2023.04.14
[백준] 단어 수학  (0) 2023.03.26
[백준] 부등호  (2) 2023.03.26
[LeetCode] Zigzag Conversion  (1) 2023.03.21
    '코딩테스트/C++ 문제풀이' 카테고리의 다른 글
    • [백준] 부분수열의 합
    • [백준] 부분수열의 합
    • [백준] 단어 수학
    • [백준] 부등호
    happy318
    happy318

    티스토리툴바