ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 6603 로또
    Algorithm/BOJ 2020. 7. 15. 12:26
    728x90

    출처: 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

    댓글

Designed by Tistory.