ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 2961 도영이가 만든 맛있는 음식
    Algorithm/BOJ 2021. 2. 19. 14:04
    728x90

    출처: https://www.acmicpc.net/problem/2961

    분류: 재귀


    접근방식

    N이 1 ~ 10 으로 아주 작아서 백트래킹으로 모든 조합을 다 계산해서 풀 수 있었습니다.

    처음에는 뭐에 홀렸는지 단순히 이중 포문으로 모든 경우를 다 체크할 수 있지 않나? 라고 생각했었네요...

    단순히 이렇게 하면 중간을 건너뛴 1, 3 같은 조합은 체크할 수가 없겠죠 ㅠㅠ

    s는 곱이고 b는 합이기 때문에 초기값으로 1, 0을 넣고 시작해줬습니다.

    처음을 안 넣었을 경우는 계산하면 안 되기 때문에 각 케이스에서 재료를 넣어서 새롭게 만든 조합의 차만 생각을 해줬습니다.

     

    해결방법

    let n = Int(readLine()!)!
    var flavors = [[Int]]()
    for _ in 0..<n {
        flavors.append(readLine()!.split(separator: " ").map({ Int(String($0))! }))
    }
    
    var minDiff = Int.max
    
    func combine(_ index: Int, s: Int, b: Int) {
        guard index < n else { return }
        let newS = s * flavors[index][0]
        let newB = b + flavors[index][1]
        if minDiff > abs(newS-newB) {
            minDiff = abs(newS-newB)
        }
        combine(index+1, s: newS, b: newB)
        combine(index+1, s: s, b: b)
    }
    
    combine(0, s: 1, b: 0)
    print(minDiff)

     

    배운점

    정신 똑땍이 차리자.

    'Algorithm > BOJ' 카테고리의 다른 글

    백준 15810 풍선 공장  (0) 2021.03.03
    백준 1149 RGB 거리  (0) 2021.02.19
    백준 1074 Z  (0) 2021.02.18
    백준 1992 쿼드트리  (0) 2021.02.18
    백준 1926 그림  (0) 2021.02.05

    댓글

Designed by Tistory.