[백준 / C++] N과 M (8)(실버3, 15657)

2024. 9. 15. 23:27·코딩테스트/백준 (Study)
728x90
반응형

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

 

문제

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

  • N개의 자연수 중에서 M개를 고른 수열
  • 같은 수를 여러 번 골라도 된다.
  • 고른 수열은 비내림차순이어야 한다.
    • 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.

입력

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

둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.

출력

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

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

예제 입력 1

3 1
4 5 2

예제 출력 1

2
4
5

예제 입력 2

4 2
9 8 7 1

예제 출력 2

1 1
1 7
1 8
1 9
7 7
7 8
7 9
8 8
8 9
9 9

예제 입력 3

4 4
1231 1232 1233 1234

예제 출력 3

1231 1231 1231 1231
1231 1231 1231 1232
1231 1231 1231 1233
1231 1231 1231 1234
1231 1231 1232 1232
1231 1231 1232 1233
1231 1231 1232 1234
1231 1231 1233 1233
1231 1231 1233 1234
1231 1231 1234 1234
1231 1232 1232 1232
1231 1232 1232 1233
1231 1232 1232 1234
1231 1232 1233 1233
1231 1232 1233 1234
1231 1232 1234 1234
1231 1233 1233 1233
1231 1233 1233 1234
1231 1233 1234 1234
1231 1234 1234 1234
1232 1232 1232 1232
1232 1232 1232 1233
1232 1232 1232 1234
1232 1232 1233 1233
1232 1232 1233 1234
1232 1232 1234 1234
1232 1233 1233 1233
1232 1233 1233 1234
1232 1233 1234 1234
1232 1234 1234 1234
1233 1233 1233 1233
1233 1233 1233 1234
1233 1233 1234 1234
1233 1234 1234 1234
1234 1234 1234 1234

문제 풀이

이번 문제는 백트래킹 연습하기 좋은 N과 M 시리즈의 문제입니다.

 

입력받은 수들을 m개 뽑아 조합하면 되는 간단한 문제입니다.

핵심은 수열이 사전 순으로 증가하는 순서로 배치되어야 한다는 점이며, 이를 위해 미리 정렬을 한 뒤 간단히 추가하고 완전 탐색 로직에서 배열의 크기가 m이 될 때까지 순회하며 값을 추출해주면 풀리는 문제입니다.

 

문제의 난이도도 간단하고, 백트래킹이 감이 안오시는 분들은 N과 M 문제를 처음부터 쭉 풀어봐도 좋을 것 같습니다.

코드

더보기
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int n, m;
vector<int> v;

void Go(int cnt, vector<int> nums)
{
	if (nums.size() == m)
	{
		for (int num : nums)
		{
			cout << num << " ";
		}
		cout << '\n';
		return;
	}

	for (int i = cnt; i < n; i++)
	{
		nums.push_back(v[i]);
		Go(i, nums);
		nums.pop_back();
	}
	return;
}

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		int tempNum;
		cin >> tempNum;

		v.push_back(tempNum);
	}

	sort(v.begin(), v.end());

	vector<int>temp;
	Go(0, temp);
	
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'코딩테스트 > 백준 (Study)' 카테고리의 다른 글

[백준 / C++] 1로 만들기(실버3, 1463)  (0) 2024.10.11
[백준 / C++] N과 M (9)(실버2, 15663)  (0) 2024.09.19
[백준 / C++] 스도쿠(골드4, 2580)  (0) 2024.09.12
[백준 / C++] N-Queen(골드4, 9663)  (0) 2024.09.11
[백준 / C++] 로또 (실버2, 6603)  (0) 2024.09.10
'코딩테스트/백준 (Study)' 카테고리의 다른 글
  • [백준 / C++] 1로 만들기(실버3, 1463)
  • [백준 / C++] N과 M (9)(실버2, 15663)
  • [백준 / C++] 스도쿠(골드4, 2580)
  • [백준 / C++] N-Queen(골드4, 9663)
리태s
리태s
게임 클라이언트 프로그래머 직무를 준비하며 공부한 내용을 정리한 블로그입니다.
    반응형
    250x250
  • 리태s
    LeeTaes 공부노트
    리태s
  • 전체
    오늘
    어제
    • Home (165)
      • 프로젝트 (20)
        • Isaac 3D (5)
        • TimelessAdventure (13)
        • FruitsPuzzle (2)
      • Game Programming (25)
        • C# (8)
        • Unity Engine (6)
        • Unreal Engine (8)
        • UE_Multiplayer (3)
      • 코딩테스트 (111)
        • 프로그래머스 (Lv. 0) (27)
        • 프로그래머스 (Lv. 1) (31)
        • 프로그래머스 (Lv. 2) (21)
        • 백준 (Study) (29)
        • 알고리즘 (3)
      • CS지식 (7)
        • 운영체제 (7)
      • 일상 (2)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    tsoftobjectptr
    2018 kakao
    후기
    project t.a develop
    2019 kakao
    Unreal Engine
    ai controller
    프로젝트
    청년취업사관학교
    delegate
    c#
    fsoftobjectpath
    Algorithm
    sesac
    issac3d
    2022 kakao
    C++
    구현
    프로세스
    pcce 기출문제
    timelessadventure
    코딩테스트
    프로그래머스
    dataasset
    unrealengine
    unity
    백준
    Summer/Winter Coding
    CS지식
    fruitspuzzle
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
리태s
[백준 / C++] N과 M (8)(실버3, 15657)
상단으로

티스토리툴바