알고리즘 문제 풀이

프로그래머스 - 타겟 넘버

블린더르 2020. 12. 9. 00:00

풀이

/*
 * 2020-12-08
 * https://programmers.co.kr/learn/courses/30/lessons/43165
 */

var answer = 0

fun targetNumber(numbers: IntArray, target: Int): Int {
  answer = 0
  addNumber(0, numbers, 0, target)
  return answer
}

tailrec fun addNumber(sum: Int, numbers: IntArray, index: Int, target: Int) {
  if (numbers.count() == index) {
    if (sum == target)
      answer++
  } else {
    addNumber(sum + numbers[index], numbers, index + 1, target)
    addNumber(sum + numbers[index] * -1, numbers, index + 1, target)
  }
}

테스트

class DfsBfsTest {
  companion object {
    @JvmStatic
    fun targetNumberArgs(): Stream<Arguments> = Stream.of(
      Arguments.of(intArrayOf(1, 1, 1, 1, 1), 3, 5),
      Arguments.of(intArrayOf(1, 2, 1, 1, 1), 4, 4)
    )
  }

  @ParameterizedTest
  @MethodSource("targetNumberArgs")
  fun testTargetNumber(numbers: IntArray, target: Int, answer: Int) {
    assertEquals(answer, targetNumber(numbers, target))
  }
}
반응형