본문 바로가기

알고리즘/🥈 실버

백준 15651 N과 M (3) 자바 풀이

728x90

난이도 : 실버3

풀이일 : 2401243

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

 

15651번: N과 M (3)

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

www.acmicpc.net


링크로 이동하기 귀찮은 분들을 위한 문제 캡쳐


풀이 코드

import java.util.Scanner;

public class Main {
	
	static int N, M;
	static int[] array;
	// 시간초과 방지를 위한 출력 방식
	static StringBuilder sb = new StringBuilder();
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		N = sc.nextInt();
		M = sc.nextInt();
		
		array = new int[M];
		
		DFS(0);
		System.out.print(sb);
	}
	
	// 중복 여부를 고려하지 않고, 배열에 수 추가
	static void DFS(int depth) {
		if (depth == M) {
			for (int i : array) {
				sb.append(i + " ");
			}
			sb.append('\n');
			return;
		}
		
		for (int i = 0; i < N; i++) {
			array[depth] = i + 1;
			DFS(depth + 1);
		}
	}
}
  • StringBuilder : System.out.println()으로 매번 출력하니 시간초과가 나와서 출력 방식을 변경
  • 중복된 숫자 출력이 가능하기 때문에, visited 배열을 만들지 않고, 숫자들을 담아 출력

느낀점

  • 여행 첫 날이라 시간이 급해 날로 먹으려고 했는데 실패했다. 다른 출력 방법도 공부해서 따로 포스팅을 해봐야지