class Solution {
var answer = 0
fun solution(numbers: IntArray, target: Int): Int {
an(0,numbers,target,0,"")
println(answer)
return answer
}
fun an(count:Int,numbers: IntArray,target: Int,numIncome:Int,string: String){
if(numIncome == target && count == numbers.size){
answer ++
println(string)
return
}
if(count == numbers.size){
return
}
an(count+1,numbers,target,numIncome+numbers[count],string+"+")
an(count+1,numbers,target,numIncome-numbers[count],string+"-")
}
}
계속 탐색하는 거 만들어봄
다른 사람의 코드..
class Solution {
fun solution(numbers: IntArray, target: Int): Int {
return numbers.fold(listOf(0)) { list, i ->
list.run {
map { it + i } + map { it - i }
}
}.count { it == target }
}
}
1. run
Calls the specified function block with this value as its receiver and returns its result.
람다 안의 함수를 반복함
우선 map{} 이건 각각의 원소에 접근해서 리스트를 만들어 주는 함수임
list + list 는 이렇게 됨
fun main(){
val map1 = listOf(1,2)
val map2 = listOf(9,1)
println(map1 +map2)
}
[1, 2, 9, 1]
리스트가 길어지면서 더해짐
그럼 다시 위를 해석하면
FOLD를 사용하면서 INT만 썻지만 R타입을 받는 제러닉 이므로 다양하게 사용이 가능하다는 것을 이제야 알게 되었다.
이 풀이는 LIST를 사용함
말 그대로 최고 시작은 [0] 으로 시작하여
첫 자리의 원소를 사용하여
[1] + [-1] -> [1,-1]을 만들어 주고
FOLD에 의해서 축척되어 다음
[2,0] , [0,-2] -> [2,0,0,-2] 이런식으로 반복되는 것임
fun solution(numbers: IntArray, target: Int): Int {
var count = 0
return numbers.fold(listOf(0)) { list, i ->
list.map { it+i } + list.map { it-i }
}.count {
it == target }.apply { count = this }.also { println(count) }
}
이렇게 run 안해도 됨 그리고 apply나 also써서 확인도 가능함
'코딩테스트(코틀린) 기초부터 연습' 카테고리의 다른 글
프로그래머스 dfs/bfs 단어변환 (0) | 2021.04.12 |
---|---|
프로그래머스 dfs/bfs 네트워크문제 (0) | 2021.04.12 |
프로그래머스 탐욕법 섬연결하기 (0) | 2021.04.10 |
프로그래머스 탐욕법 큰수만들기 (0) | 2021.04.09 |
프로그래머스 탐욕법 체육복 (0) | 2021.04.09 |