Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 9095
- 14888
- 16637
- 색종이 붙이기
- 14502
- 17143
- Java
- 좋아요
- 구슬탈출2
- 재귀
- 다리 만들기2
- 따라하기
- 인스타그램
- 댓글
- 인스타
- django
- 17136
- 연산자 끼워넣기
- 17472
- 장고
- 17144
- 로또
- 6603
- Ajax
- 1182
- 백준
- 부분수열의 합
- 알고리즘
- 괄호추가하기
- 미세먼지 안녕!
Archives
- Today
- Total
Be a developer
백준 6603 로또 (재귀) 본문
이전에 풀었던 로또 문제를 재귀로 푸는 것이다.
이전에는 순열로 풀기위해 선택한 번호는 0으로 넣고, 선택하지 않은 번호는 1로 넣는 새로운 vector를 선언해주었다.
하지만 재귀에서는 앞선 암호 문제처럼 재귀를 통해 넣고, 안 넣고를 할 수 있기 때문에 새로운 vector가 필요없다.
대신 넣고 안 넣고를 check할 check 배열을 하나 생성한다.
check 배열을 놓고 풀지 않고, vector하나를 두고 선택하면 vector에 push_back으로 넣고, 넣지 않으면 pop_back으로 빼서 풀 수도 있다.
자세한 설명은 아래 주석으로..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <algorithm> #include <vector> using namespace std; //선택되면 true로 설정된다. bool check[50]; void solve(int idx, int cnt, vector<int> v, int k) { //6개를 선택하고 나면 더이상 선택하지 않도록 한다. if (cnt > 6)return; //6개를 선택하면 check에 true로 저장된 index 번호로 v에서 출력한다. if (cnt == 6) { for (int i = 1; i < 50; i++) { if (check[i]) printf("%d ", i); } printf("\n"); //정답 출력하고 나서 return 하는 거 까먹지 말기 return; } //만약 주어진 k보다 idx가 커지면 return if (idx >= k)return; //선택하는 경우이기 때문에 값을 check하고(선택하고) 나서 solve에 들어간다. check[v[idx]] = true;//배열의 index로 배열의 value를 사용하는 것에 주의 solve(idx + 1, cnt + 1, v, k); //선택하지 않는 경우이기 때문에 값을 false로 하고 나서 solve에 들어간다. check[v[idx]] = false; solve(idx + 1, cnt, v, k); } int main(int argc, char** argv) { while (1) { int k; cin >> k; if (k == 0)break; vector<int> v(k); for (int i = 0; i < k; i++)cin >> v[i]; //매 test case에 들어가기 전에 초기화 해줘야 한다. for (int i = 1; i < 50; i++) check[i] = false; //현재 선택 할 index번호, 선택된 개수, 번호가 들어 있는 vector solve(0, 0, v, k); printf("\n"); } return 0; } | cs |
'알고리즘' 카테고리의 다른 글
백준 14501 퇴사 (0) | 2019.04.04 |
---|---|
백준 1182 부분수열의 합 (0) | 2019.04.03 |
백준 1759 암호 만들기 (0) | 2019.04.02 |
백준 9095 1,2,3 더하기 (재귀) (0) | 2019.04.01 |
백준 14888 연산자 끼워넣기 (0) | 2019.04.01 |
Comments