[백준] 2961번: 도영이가 만든 맛있는 음식 - Kotlin[코틀린]

2024. 3. 7. 20:58·알고리즘/Baekjoon

문제

 

 

2961번: 도영이가 만든 맛있는 음식

첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은

www.acmicpc.net

 


풀이

 

 백트래킹을 사용하여 해결할 수 있다. 백트래킹은 가능한 모든 경우의 수를 탐색하면서 답을 찾는 알고리즘으로 재귀 함수를 이용한다.

 

 재귀 함수에서는 현재 선택한 재료로 만들어진 음식의 신맛과 쓴맛을 계산하고, 두 맛의 차이의 최소값을 갱신한다. 이후 다음 재료를 선택하고 다시 재귀적으로 함수를 호출한다. 선택한 재료는 방문 처리를 하여 중복 선택을 방지한다.

 

 모든 가능한 조합을 탐색한 후에 최소값을 출력한다.

 


코드

 

import kotlin.math.abs

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val num = br.readLine().toInt()
    val arr = Array(num){ br.readLine().split(' ').map { it.toInt() } }
    val visited = BooleanArray(num)
    var min = Int.MAX_VALUE

    fun check(sour: Int, bitter: Int) {
        min = minOf(min, abs(sour-bitter))

        for(i in 0 until num) {
            if(visited[i]) continue
            visited[i] = true
            check(sour*arr[i][0], bitter+arr[i][1])
            visited[i] = false
        }
    }

    for(i in 0 until num) {
        visited[i] = true
        check(arr[i][0], arr[i][1])
        visited[i] = false
    }

    bw.write("$min")
    bw.flush()
    bw.close()
    br.close()
}

 

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 14719번: 빗물 - Kotlin[코틀린]  (0) 2024.03.12
[백준] 11444번: 피보나치 수 6 - Kotlin[코틀린]  (0) 2024.03.10
[백준] 10830번: 행렬 제곱 - Kotlin[코틀린]  (0) 2024.03.06
[백준] 1747번: 소수&팰린드롬 - Kotlin[코틀린]  (0) 2024.03.05
[백준] 1629번: 곱셈 - Kotlin[코틀린]  (0) 2024.03.04
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 14719번: 빗물 - Kotlin[코틀린]
  • [백준] 11444번: 피보나치 수 6 - Kotlin[코틀린]
  • [백준] 10830번: 행렬 제곱 - Kotlin[코틀린]
  • [백준] 1747번: 소수&팰린드롬 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      이분 탐색
      소수 판정
      우선순위 큐
      유니온파인드
      모듈러 곱셈 역원
      크루스칼
      피보나치
      누적 합
      백트래킹
      수학
      dfs
      티스토리
      문자열
      정렬
      큐
      그래프이론
      에라토스테네스의 체
      구현
      프림
      스택
      BFS
      투 포인터
      DP
      재귀
      그래프 탐색
      그리디
      분할 정복
      분리집합
      브루트포스
      MST
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 2961번: 도영이가 만든 맛있는 음식 - Kotlin[코틀린]
    상단으로

    티스토리툴바