반응형
```
백준 14888번 연산자 끼워넣기 Kotlin 구현해 보기
```
이번 글을 통해 배워갈 내용
- 백준 14888번 풀이
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
백준 14888번 연산자 끼워넣기는 난이도 실버문제로서
수의 개수
해당되는 수의 개수만큼의 수들
연산자의 종류와 개수들이 주어질 때
해당되는 연산자와 수들을 조합해서 만들 수 있는 가장 큰 수와 작은 수를 구해주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
입력을 받고
재귀함수를 만들어서
재귀함수만큼 Bruteforce로 돌게 해서 풀었습니다.
import java.lang.Integer.min
import kotlin.math.max
fun main(args: Array<String>) {
// input
val inputDto = getInput()
// output
print(solution(inputDto))
}
data class InputDto(
val lineCnt: Int,
val nums: List<Int>,
var addCnt: Int,
var subCnt: Int,
var mulCnt: Int,
var divCnt: Int,
var minV: Int = Int.MAX_VALUE,
var maxV: Int = Int.MIN_VALUE,
) {
fun dfs(idx: Int, v: Int) {
if (idx == lineCnt) {
minV = min(minV, v)
maxV = max(maxV, v)
} else {
if (addCnt > 0) {
addCnt--
dfs(idx + 1, v + nums[idx])
addCnt++
}
if (subCnt > 0) {
subCnt--
dfs(idx + 1, v - nums[idx])
subCnt++
}
if (mulCnt > 0) {
mulCnt--
dfs(idx + 1, v * nums[idx])
mulCnt++
}
if (divCnt > 0) {
divCnt--
dfs(idx + 1, v / nums[idx])
divCnt++
}
}
}
}
fun getInput(): InputDto {
val lineCnt = readln().toInt()
val nums = readln().split(" ").map { k -> k.toInt() }
val ops = readln().split(" ").map { k -> k.toInt() }
val addCnt = ops[0]
val subCnt = ops[1]
val mulCnt = ops[2]
val divCnt = ops[3]
return InputDto(lineCnt, nums, addCnt, subCnt, mulCnt, divCnt)
}
fun solution(dto: InputDto): String {
dto.dfs(1, dto.nums[0])
return "${dto.maxV}\n${dto.minV}"
}
// https://codemasterkimc.tistory.com/
테스트
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
internal class MainKtTest {
@Test
fun test() {
assertEquals(
"30\n30",
solution(
InputDto(
lineCnt = 2,
nums = listOf(5, 6),
addCnt = 0,
subCnt = 0,
mulCnt = 1,
divCnt = 0,
minV = 2147483647,
maxV = -2147483648
)
)
)
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
반응형
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
백준 1182번 부분수열의 합 Kotlin 구현해보기 (0) | 2023.03.11 |
---|---|
백준 9663번 N-Queen Kotlin 구현해보기 (0) | 2023.03.10 |
백준 1076번 저항 Kotlin 구현해보기 (0) | 2022.11.19 |
백준 25904번 Kotlin 구현해보기 (0) | 2022.11.19 |
백준 1075번 나누기 Kotlin 구현해보기 (0) | 2022.11.19 |