[Java, JS]_6603_로또

hanseungjune·2023년 6월 13일
0

알고리즘

목록 보기
7/33
post-thumbnail

작성 코드

import java.io.*;
import java.util.*;

public class lotto_6603 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int cnt = Integer.parseInt(st.nextToken());
            if (cnt == 0) {
                break;
            }

            int[] lst = new int[cnt];
            for (int i = 0; i < cnt; i++) {
                lst[i] = Integer.parseInt(st.nextToken());
            }

            List<List<Integer>> combinations = new ArrayList<>();
            generateCombinations(combinations, new ArrayList<>(), lst, 0);

            for (List<Integer> combination : combinations) {
                for (int num : combination) {
                    System.out.print(num + " ");
                }
                System.out.println();
            }
            System.out.println();
        }
        br.close();
    }

    public static void generateCombinations(List<List<Integer>> combinations, List<Integer> currentCombination, int[] lst, int start) {
        if (currentCombination.size() == 6) {
            combinations.add(new ArrayList<>(currentCombination));
            return;
        }

        for (int i = start; i < lst.length; i++) {
            currentCombination.add(lst[i]);
            generateCombinations(combinations, currentCombination, lst, i + 1);
            currentCombination.remove(currentCombination.size() - 1);
        }
    }
}

로직 설명

  • main 메서드에서는 반복문을 통해 입력을 처리합니다.
  • 입력은 cnt와 숫자들로 이루어진 배열인 lst로 받습니다.
  • cnt가 0이면 입력 종료를 의미하므로 반복문을 종료합니다.
  • combinations 리스트는 가능한 조합을 저장할 리스트입니다.
  • generateCombinations 메서드를 호출하여 조합을 생성합니다.
  • generateCombinations 메서드는 재귀적으로 조합을 생성하는 역할을 수행합니다.
  • 메서드에는 다음 인자들이 전달됩니다.
    • combinations: 조합을 저장할 리스트
    • currentCombination: 현재까지 만들어진 조합을 저장할 리스트
    • lst: 입력으로 받은 숫자들의 배열
    • start: 조합 생성을 시작할 인덱스
  • generateCombinations 메서드에서는 다음과 같은 작업을 수행합니다.
    • currentCombination의 크기가 6이 되면, 즉 6개의 숫자로 이루어진 조합이 완성되면 combinations 리스트에 추가합니다.
    • start부터 배열의 끝까지 반복하면서 숫자를 하나씩 추가하고, 재귀 호출을 통해 다음 숫자를 선택합니다.
    • 재귀 호출이 끝나면 현재 선택한 숫자를 제거하여 다른 조합을 생성합니다.
  • main 메서드에서는 생성된 조합을 출력합니다. 각 조합은 리스트로 표현되며, 리스트의 요소를 순서대로 출력합니다.

자바스크립트

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.on('line', (input) => {
  const cnt = parseInt(input);
  if (cnt === 0) {
    rl.close();
    return;
  }

  const lst = input.split(' ').map(Number);

  const combinations = [];
  generateCombinations(combinations, [], lst, 0);

  for (const combination of combinations) {
    console.log(combination.join(' '));
  }
  console.log();
});

function generateCombinations(combinations, currentCombination, lst, start) {
  if (currentCombination.length === 6) {
    combinations.push([...currentCombination]);
    return;
  }

  for (let i = start; i < lst.length; i++) {
    currentCombination.push(lst[i]);
    generateCombinations(combinations, currentCombination, lst, i + 1);
    currentCombination.pop();
  }
}

파이썬

def generate_combinations(combinations, current_combination, lst, start):
    if len(current_combination) == 6:
        combinations.append(list(current_combination))
        return
    
    for i in range(start, len(lst)):
        current_combination.append(lst[i])
        generate_combinations(combinations, current_combination, lst, i + 1)
        current_combination.pop()

while True:
    cnt = int(input())
    if cnt == 0:
        break
    
    lst = list(map(int, input().split()))
    
    combinations = []
    generate_combinations(combinations, [], lst, 0)
    
    for combination in combinations:
        print(*combination)
    print()
profile
필요하다면 공부하는 개발자, 한승준

0개의 댓글