anott
기록
anott
  • 분류 전체보기
    • 오라클
    • SQL
    • 알고리즘
      • 백준저지
      • 프로그래머스
      • SWEA
    • 개발 관련
    • 프론트엔드
      • TypeScript, Next.js
      • React 공식문서 읽기
hELLO · Designed By 정상우.
anott

기록

백준저지 15656번 N과 M (7)
알고리즘/백준저지

백준저지 15656번 N과 M (7)

2021. 8. 28. 23:12

출처: https://www.acmicpc.net/problem/15656

 

15656번: N과 M (7)

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

www.acmicpc.net

 

제출 날짜: 2021년 8월 28일 토요일

 

 

 

생각

백준저지 N과 M 시리즈 중 3번(https://www.acmicpc.net/problem/15651)과 거의 동일한 문제다. 그냥 Scanner와 System.out.println()을 사용했더니 시간 초과가 나서 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder를 몽땅 사용해서 통과했다. BufferedWriter는 static 전역변수로 선언해도 되는 건 알았는데 사용은 처음 해봤다.

그런데 검색(https://stackoverflow.com/questions/22148487/using-a-bufferedwriter-in-a-static-class, https://stackoverflow.com/questions/28003137/declaring-a-static-filewriter-and-filereader)해보니 선언은 static으로 하되 생성은 사용할 때 하는 게 나은 것 같다.

 

 

 

코드

// 출처: 백준저지 15656번 N과 M (7) https://www.acmicpc.net/problem/15656

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class BOJ15656 {
    static int N, M;
    static int[] input, nums;
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        input = new int[N];
        nums = new int[N];
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            input[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(input);
        getNum(0);

        bw.flush();
        bw.close();
    }

    private static void getNum(int cnt) throws IOException {
        if (cnt == M) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < M; i++) {
                sb.append(nums[i] + " ");
            }
            bw.write(sb + "\n");
            return;
        }

        for (int i = 0; i < N; i++) {
            nums[cnt] = input[i];
            getNum(cnt + 1);
        }
    }
}
저작자표시 비영리

'알고리즘 > 백준저지' 카테고리의 다른 글

백준저지 2669번 직사각형 네개의 합집합의 면적 구하기  (0) 2021.08.30
백준저지 10163번 색종이  (0) 2021.08.29
백준저지 2309번 일곱 난쟁이  (0) 2021.08.27
백준저지 2116번 주사위 쌓기  (0) 2021.08.26
백준저지 2527번 직사각형  (0) 2021.08.25
    '알고리즘/백준저지' 카테고리의 다른 글
    • 백준저지 2669번 직사각형 네개의 합집합의 면적 구하기
    • 백준저지 10163번 색종이
    • 백준저지 2309번 일곱 난쟁이
    • 백준저지 2116번 주사위 쌓기
    anott
    anott

    티스토리툴바