이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 6603(로또) - Python(파이썬),Java(자바)- 백트래킹

  • 2022.06.16 23:54
  • [백준] Python,Java로 풀기📖
    반응형
     

    6603번: 로또

    입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로

    www.acmicpc.net

     

    파이썬 Permutation: https://coooco.tistory.com/72

    📌 파이썬 Combination 사용 

    import sys
    from itertools import combinations
    #0이 입력되기 전까지 계속 입력받기
    while True:
        s = list(map(int,sys.stdin.readline().split()))
        #로또 종류 개수
        k = s.pop(0)
        #로또 개수 0이면 그만 입력받기
        if k==0:
            break
        #오름차순으로 정렬
        s.sort()
        #s개의 수 중에 6개 고르기
        nC6 = combinations(s,6)
        #리스트로 입력받아서 string
        for i in nC6:
            print(" ".join(str(j) for j in i))
        print()

    📌 Combination 사용하지 않고 백트래킹

    이거의 원리 ->

    comb([0,1,2,3],2)

    = { 0을 고른 상태에서 comb([1,2,3],1) }+ { 1을 고른 상태에서 comb([2,3],1) } +{ 2를 고른 상태에서 comb( [3],1 ) }

    =

    { 0을 고른 상태에서 1을 고르기 } + { 0을 고른 상태에서 2 고르기 } +{ 0을 고른 상태에서 3 고르기 } 

    + { 1을 고른 상태에서 2 고르기 } + { 1을 고른 상태에서 3 고르기}

    + { 2를 고른 상태에서 3고르기 }

     

    즉 , comb 함수에는 ( 골라야하는 배열, 배열에서 골라야하는 갯수 )를 변수로 가진다.

    💻 Python(파이썬)

    import sys
    
    def comb(arr,n):
    	#종류 담는 리스트 
        result=[]
        #뽑을 애가 없는 경우
        if n==0:
            return [[]]
        #i:인덱스, num:배열 안에 있는 번호
        for (i,num) in enumerate(arr):
        	#재귀함수 : i번째를 택했을 때 
            for j in comb(arr[i+1:],n-1):
                result.append([num]+j)
        return result
    
    while True:
        s = list(map(int,sys.stdin.readline().split()))
        k = s.pop(0)
        if k==0:
            break
        s.sort()
        result = comb(s,6)
        for i in result:
            print(" ".join(str(j) for j in i))
        print()

    💻Java(자바)

    import java.util.*;
    import java.io.*;
    
    public class Main {
        static boolean [] chk;
        static int[] s;
        static int k;
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            while(true){
                StringTokenizer st = new StringTokenizer(br.readLine()," ");
                k = Integer.parseInt(st.nextToken());
                s = new int[k];
                chk = new boolean[k];
                if(k==0){
                    break;
                }
                for(int i=0;i<k;i++){
                    s[i]=Integer.parseInt(st.nextToken());
                }
                Arrays.sort(s);
                dfs(0,0);
                System.out.println();
            }
        }
        public static void dfs(int depth,int start){
            if(depth==6){
                for(int i=0;i<k;i++){
                    if(chk[i]){
                        System.out.print(s[i]+" ");
                    }
                }
                System.out.println();
            }
            for(int i=start;i<k;i++){
                chk[i]=true;
                dfs(depth+1,i+1);
                chk[i]=false;
            }
        }
    }
    반응형

    '[백준] Python,Java로 풀기📖' 카테고리의 다른 글

    백준 1991(트리 순회) - Python(파이썬) - 트리,재귀  (0) 2022.06.03
    백준 2448(별 찍기) - Python(파이썬) - 재귀  (0) 2022.06.03

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 1991(트리 순회) - Python(파이썬) - 트리,재귀

      백준 1991(트리 순회) - Python(파이썬) - 트리,재귀

      2022.06.03
    • 백준 2448(별 찍기) - Python(파이썬) - 재귀

      백준 2448(별 찍기) - Python(파이썬) - 재귀

      2022.06.03
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (168)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (4)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 99클럽
    • 오블완
    • 티스토리챌린지
    • 백준
    • 코딩테스트준비
    • TiL
    • 항해99
    • 프로그래머스

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바