어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray): Int {
var answer: Int = 123456789
val numList = mutableListOf<String>()
var index = 0
for(i in absolutes){
if(signs[index]){
numList.add(i.toString())
}else{
numList.add("-" + i)
}
index++
}
val sumList = numList.map{it.toInt()}
answer = sumList.sum()
return answer
}
}
뭔가 무식하게 푼 느낌이 들지만
일단은 성공했당
풀이 과정
숫자와 부호 합치기
빈 스트링 배열 numList를 만들어서, for문을 사용해서 i가 absolutes 의 요소일 때, signs가 ture 면 numList 에 “i”를 추가하고, false이면 “-i” 를 추가하게 했다.
String List를 IntList로 변환해주기
numList 가 String List 이기 때문에 sumList 라는 새로운 리스트를 만들어서 map 함수로 각 요소를 Int로 변환해서 넣어줬다.
answer 에 sumList 의 요소를 다 더한 값을 넣어쥐class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray) =
absolutes.foldIndexed(0) { idx, acc, num -> acc + if (signs[idx]) num else -num }
}
foldIndexed 라는 함수를 사용해서 풀었다.
요즘 맨날 코드카타 풀 때마다 확장함수 공부해야한다고 코멘트 하고있는데 언제하지?
레이아웃 먼저 다 공부하고 할거임!!!!!
class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray): Int {
val toIntSignsArray = signs.map { if (it) 1 else -1 }
return absolutes.zip(toIntSignsArray).map { it.first * it.second }.sum()
}
}
흠 여기서는 toIntSignsArray 라는 변수를 만들고 signs 의 요소를 true 면 1 , false면 -1 로 변환해서 넣어줬음
그 후에 .zip 이 뭔지는 모르지만 아마도 absolutes 를 toIntSignsArray 랑 합쳐서 absolutes의 요소와 toIntSignsArray 의 요소를 곱해서 각각 맞게 양수와 정수로 만들고 합쳐준듯
class Solution {
fun solution(absolutes: IntArray, signs: BooleanArray): Int {
var answer: Int = 0
for(i in 0..absolutes.size-1) {
if(signs[i]) {
answer += absolutes[i]
} else {
answer -= absolutes[i]
}
}
return answer
}
}
이 분은 따로 배열을 합치지않고
signs가 ture면 answer에 absolutes 수를 더하고
signs가 false면 answer에 absolutes 수를 빼서 간단하게 완성하심
차라리 나도 위 처럼 확장함수 써서 못 풀 거면 이렇게 푸는게 나았을것 같기도 하다.
== ture 이런거 없이 걍 이름만 넣어줘도 알아서 처리한다는 것을 깨달음