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 |
Tags
- 스택
- 조합
- 재귀
- 큐
- 그리디
- 메모리풀
- BFS
- 빠른 입출력
- 비트마스크
- 순열
- 시뮬레이션
- 완전 탐색
- 클래스
- 중복 순열
- 분할 정복
- BeautifulSoup
- lis
- 피보나치 수
- 이분 탐색
- MST
- 크루스칼
- 백트래킹
- 우선순위 큐
- 문자열
- Knapsack
- SSAFY
- DP
- dfs
- 링크드리스트
- 세그먼트 트리
Archives
- Today
- Total
작심 24/7
[백준] 15651번 N과 M - 3 (C++, JAVA) 본문
15651번: N과 M (3)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
N개 중에 중복 포함, 순서를 고려하여 M개를 뽑는 중복 순열 문제이다.
순열과 다른 점은 중복을 체크해줄 필요 없기 때문에 check배열만 없애면 된다.
자바는 Scanner + print 써서 그냥 제출하니까 시간 초과 나길래
Scanner 대신 BufferedReader를 썼더니 또 시간 초과됐다 (자바 싫어)
찾아보니 print가 시간이 꽤 오래 걸린다 하더라
그래서 출력 부분을 StringBuilder로 넣어준 뒤 마지막에 한 번만 출력시켰더니 통과
< C++ 코드 >
#include <iostream>
#include <vector>
using namespace std;
vector <int> v;
int cnt = 0;
void multiPermutation(int N, int M) {
if (cnt == M) {
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << "\n";
}
else {
for (int i = 0; i < N; i++) {
v.push_back(i + 1);
cnt++;
multipermutation(N, M);
v.pop_back();
cnt--;
}
}
}
int main() {
int N, M;
cin >> N >> M;
multipermutation(N, M);
return 0;
}
< JAVA 코드 >
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_15651_N과M_3 {
private static int N, M;
private static int arr[];
private static StringBuilder sb = new StringBuilder();
public static void permutation(int cnt) {
if(cnt == M) {
for(int val : arr) sb.append(val).append(' ');
sb.append('\n');
return;
}
for(int i = 0; i < N; i++) {
arr[cnt] = i + 1;
permutation(cnt + 1);
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); arr = new int[M];
permutation(0);
System.out.println(sb);
}
}
'백준' 카테고리의 다른 글
[백준] 9663번 N-Queen (2) | 2020.05.24 |
---|---|
[백준] 15652번 N과 M - 4 (C++, JAVA) (0) | 2020.05.24 |
[백준] 15650번 N과 M - 2 (C++, JAVA) (0) | 2020.05.24 |
[백준] 15649번 N과 M - 1 (C++, JAVA) (0) | 2020.05.24 |
[백준] 10814번 나이순 정렬 (0) | 2020.05.23 |
Comments