BOJ 15650 N과 M (2)

2025. 2. 26. 20:38·Algorithm/문제풀이

15650번: N과 M (2)

문제

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 고른 수열은 오름차순이어야 한다

입력

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

출력

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다.

 

문제 풀이

이 문제는 백트래킹을 사용하여 문제를 풀었습니다. 

백트래킹이란 ? 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘입니다.

위와 같은 방식으로 한 배열와 특정한 수가 쓰였는지에 대한 배열을 선언해 주고 점점 단계를 거치면서 조건에 맞게 배열을 출력해주자. N과 M (1) 과 거의 유사한 문제지만 오름차순으로 출력해야 한다. 이부분만 추가 된 문제이다.

#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int n, m;
int arr[10];
int isused[10];
void func(int k)
{
	if (k == m)
	{
		for (int i = 0; i < m; i++)
		{
			cout << arr[i] << ' ';
		}
		cout << '\n';
		return;
	}

	for (int i = 1; i <= n; i++)
	{
		if (!isused[i]&&i>=arr[k-1]||k==0)
        // 현재 수 i 와 바로 이전 수 arr[k-1] 비교해서 현재수가 이전수보다 커야함(오름차순)
        //k==0 조건은 유효한 인덱스를 참조록하는 조건문 추가. 
		{
			arr[k] = i;
			isused[i] = 1;
			func(k + 1);
			isused[i] = 0;
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> n >> m;
	func(0);
}

 

글 내용 중에 틀린 것이 있거나 궁금한 것이 있다면 댓글 남겨주세요! 봐주셔서 감사합니다!

'Algorithm > 문제풀이' 카테고리의 다른 글

BOJ 15663 N과 M (9)  (0) 2025.03.05
BOJ 2748 피보나치수 2  (0) 2025.02.25
BOJ 1629 곱셈  (0) 2025.02.24
'Algorithm/문제풀이' 카테고리의 다른 글
  • BOJ 15663 N과 M (9)
  • BOJ 2748 피보나치수 2
  • BOJ 1629 곱셈
뭘보느뇽
뭘보느뇽
  • 뭘보느뇽
    원기의 개발 발자취
    뭘보느뇽
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • Unity (5)
        • VR (5)
      • Algorithm (14)
        • 코딩테스트_합격자되기_인프런 _스터디 (10)
        • 문제풀이 (4)
      • Experience (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Photon Fusion 1
    코테
    IOBT
    6기 데브
    oculus interaction sdk
    뉴콘텐츠 아카데미 단기과정 1기
    핸드트래킹
    Meta Quest 2
    백트래킹
    코딩테스트
    c#
    백준
    Facial Tracking
    xreal
    one grab interactable
    C++
    Meta Quest Pro
    재귀
    Unity
    코딩 테스트 합격자 되기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
뭘보느뇽
BOJ 15650 N과 M (2)
상단으로

티스토리툴바