반응형
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 | 29 | 30 |
Tags
- bigdata engineering
- bigdata engineer
- java
- 맛집
- hadoop
- Data Engineer
- 알고리즘
- HIVE
- BFS
- BigData
- 개발
- 파이썬
- 영어
- Trino
- 여행
- 용인맛집
- 삼성역맛집
- 자바
- 코엑스
- 코딩테스트
- apache iceberg
- Data Engineering
- 코엑스맛집
- 코딩
- 코테
- Iceberg
- 백준
- 양평
- dfs
- 프로그래머스
Archives
- Today
- Total
지구정복
[BFS,DFS] 백준 - 로또 본문
728x90
반응형
-자바(백트래킹을 이용한 dfs구현)
package bfs_dfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Lotto1 {
private static int[] s; //입력받은 값들을 담을 배열
private static int[] combi = new int[13]; //6개의 로또조합이 담길 배열
private static void dfs( int start, int depth ) {
//depth가 6이면 combi배열 6번 인덱스까지 출력
if( depth == 6 ) {
for( int i=0; i<6; i++ ) System.out.print( combi[i] + " " );
System.out.println();
//이전함수로 돌아간다.(백트래킹)
return;
}
//s배열을 재귀적으로 순회하면서 6가지의 조합을 만들고 combi에 저장한다.
for( int i=start; i<s.length; i++ ) {
//조합배열의 depth자리에 s배열의 수를 집어넣는다.
combi[depth] = s[i];
//dfs함수 재귀적 호출
dfs( i+1, depth+1 );
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader( new InputStreamReader(System.in) );
//0이 입력될 때까지 무한반복
while( true ) {
StringTokenizer st = new StringTokenizer( br.readLine() );
//입력받은 값의 첫 번째 값인 k가 0이면 무한루프 종료
int k = Integer.parseInt(st.nextToken());
if( k == 0 ) break;
//k값으로 s배열 크기 정의
s = new int[ k ];
//입력받은 값의 두 번째 값부터 s배열에 담는다.
for( int i=0; i<s.length; i++ ) s[i] = Integer.parseInt(st.nextToken());
//dfs함수 호출
dfs( 0, 0 );
System.out.println();
}//while end
}//main method end
}//class end
-파이썬(combination 모듈이용, pypy3로 실행)
from itertools import combinations
lotto = []
k = []
while True:
tmp = [ x for x in map(int, input().split() ) ]
if tmp[0] == 0:
break
k.append( tmp[0] )
del tmp[0]
lotto.append( tmp )
for k in range( 0, len(k) ):
result = list(combinations( lotto[k], 6 ) )
for i in range( 0, len(result) ):
for j in range( 0, len(result[i] ) ):
print( result[i][j], end=" " )
print( end="\n" )
print()
백트래킹을 이용한 dfs풀이
def dfs( start, depth ):
if depth == 6:
for i in range( 6 ):
print( combi[i], end=" " )
print()
return
for i in range( start, len(s) ):
combi[depth] = s[i]
dfs( i+1, depth+1 )
combi = [ 0 for i in range( 13 ) ]
while True:
s = list( map( int, input().split() ) )
if s[0] == 0:
break
del s[0]
dfs( 0, 0 )
print()
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[수학] 백준 - 캠핑 (0) | 2021.07.09 |
---|---|
[BFS,DFS] 프로그래머스 - 타겟넘버 (0) | 2021.07.08 |
[BFS,DFS] 백준 - 연결요소의 개수 (0) | 2021.07.07 |
[BFS,DFS] 이코테 - 미로탈출 (0) | 2021.07.06 |
[BFS,DFS] 이코테 - 음료수 얼려 먹기 (0) | 2021.07.05 |