728x90
0. [c++] 백준 - 15651 |
https://www.acmicpc.net/problem/15651
1. 풀이 |
이 문제는 백트래킹 기법을 적용해서 푸는 문제였는데, 간단히 if문을 활용하면 n^2의 시간 내에 풀이가 가능하였다.
방법을 설명하자면,
1. 배열을 선언하고 가장 마지막 배열에 1을 지속적으로 더해준다.
2. 배열의 크기를 지속적으로 검사하는데, 만일 각 항목의 크기가 입력으로 들어온 최대 범위를 넘으면 1로 바꾸고 올림을 취해준다.(arr[N]이 최대값을 넘었으면 arr[N-1]++ 을 해준다.)
이러한 방법으로 주어진 값에 대해 원하는 출력을 할 수 있었다.
2. 소스코드 |
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 | #include<iostream> using namespace std; int arr[8]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int N, M; cin >> N >> M; //우선 배열을 초기화 for (int i = 1;i <= M;i++) { arr[i] = 1; } bool flag = false; while(1) { flag = true; for (int i = 1;i <= M;i++) { if (!flag) break; if (arr[i] != N) flag = false; } for (int i = 1;i <= M;i++) cout << arr[i] << " "; cout << "\n"; if (flag) break; arr[M]++; for (int i = M; i >= 1;i--) { if (arr[i] > N) { arr[i] = 1; arr[i - 1]++; } } } cout << endl; } | cs |
3. 참고 |
질문이나 지적 있으시면 댓글로 남겨주세요~
도움 되셨으면 하트 꾹!
'<백준> > |c++| easy' 카테고리의 다른 글
[C++] 백준 5543 - 상근날드(if) (0) | 2020.03.04 |
---|---|
[C++] 백준 18258 - 큐 2 (deque, 덱) (0) | 2020.02.10 |
[c++] 백준 10870 - 피보나치 수 5(재귀대신 반복) (0) | 2020.01.09 |
[c++] 백준 15927 - 회문은 회문아니야!!(palindrome, 회문) (0) | 2019.09.25 |
[c++] 백준 2630 - 색종이 만들기(분할 정복) (0) | 2019.08.29 |