-
백준 6603 로또Algorithm/BOJ 2020. 7. 15. 12:26728x90
출처: www.acmicpc.net/problem/6603
분류: 완전 탐색
접근방식
주어진 문제에서 로또번호 6개를 골라서 출력하는 문제입니다.
전형적인 순열문제였습니다.
제 순열 관련 글도 있습니다 :)
위 글에서 사용한 스왑방식 대신 select 를 체크할 배열을 만들어서 인덱스만 넘겨주는 방식으로 풀었습니다.
스왑해서 재귀호출하고 다시 스왑을 한 번 더 해서 원상태로 바꿔주듯이
인덱스를 선택해서 true로 바꿔주고 호출한 다음에 다시 false로 바꾸고 호출해주는 과정이 필요합니다 !
해결방법
func select(index: Int, count: Int) { //print("index: \(index), count: \(count)") if count == lottoNumberCount { for (idx, isSelect) in lotto.enumerated() { if isSelect { print(numbers[idx], terminator: " ") } } print() return } if index >= lotto.count { return } lotto[index] = true select(index: index+1, count: count+1) lotto[index] = false select(index: index+1, count: count) } let lottoNumberCount = 6 var lotto = [Bool]() var numbers = [Int]() while let n = readLine()?.split(separator: " ").map({Int($0)!}) { if n.count == 1, n[0] == 0 { break } numbers = [Int](n.dropFirst()) numbers.sort() lotto = [Bool](repeating: false, count: numbers.count) select(index: 0, count: 0) print() }
배운점
인덱스만 가지고 순열을 만드는 걸 얼마전 문제를 풀면서 공부했는데 다시한번 적용해볼 수 있어서 좋았다.
이제 완전히 내것이 된 듯??
'Algorithm > BOJ' 카테고리의 다른 글
백준 1107 리모컨 (0) 2020.07.16 백준 14500 테트로미노 (0) 2020.07.15 백준 15686 치킨 배달 (0) 2020.07.13 BOJ 14889 스타트와 링크 (0) 2020.07.08 백준 1041 주사위 (0) 2020.06.30