-
프로그래머스 - N 으로 표현 [코틀린]알고리즘 문제 풀이 2021. 2. 7. 20:53
처음 DP 문제를 풀어보았는데 생각하지 못한 부분들 때문에 풀이가 쉽지 않았다.
놓친 부분
- NN, NNN 등 의 같은 숫자가 나열되는 부분을 생각하지 않고 사칙연산만 고려함
- 바로 전에 계산한 값들에 사칙연산만 했음
- 꼭 문자열을 이용해서 계산하지 않아도 됐음
코드
/* * 2021-02-07 * https://programmers.co.kr/learn/courses/30/lessons/42895 */ fun expressedByN(N: Int, number: Int): Int { val resultList = mutableListOf<MutableSet<Int>>() var linearNum = 0 for (i in 0..8) { linearNum = linearNum * 10 + N val set = mutableSetOf(linearNum) for (j in 0 until i) { resultList[j].forEach { num -> resultList[i - j - 1].forEach { num2 -> cal(num, num2, set) } } } if (set.contains(number)) { return i + 1 } resultList.add(i, set) } return -1 } fun cal(num1: Int, num2: Int, set: MutableSet<Int>) { set.add(num1 + num2) set.add(num1 - num2) set.add(num1 * num2) if (num2 != 0) { set.add(num1 / num2) } if (num1 != 0) { set.add(num2 / num1) } }
테스트 코드
class DynamicProgrammingTest { companion object { @JvmStatic fun expressedByNArgs(): Stream<Arguments> = Stream.of( Arguments.of(5, 12, 4), Arguments.of(2, 11, 3), Arguments.of(5, 31168, -1), Arguments.of(1, 1121, 7), Arguments.of(5, 3600, 6), ) } @ParameterizedTest @MethodSource("expressedByNArgs") fun testExpressedByNArgs(N: Int, number: Int, answer: Int) { assertEquals(answer, expressedByN(N, number)) } }
참고
반응형'알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 - 등굣길 [자바] (0) 2021.02.12 프로그래머스 - 정수 삼각형 [Java] (0) 2021.02.12 프로그래머스 - 여행 경로 (0) 2021.01.17 프로그래머스 - 단어 변환 (0) 2021.01.02 프로그래머스 - 네트워크 (0) 2020.12.17