알고리즘 CODEKATA 26 (음양 더하기)

오리너구리·2024년 6월 2일
0

CODEKATA

목록 보기
26/57
post-thumbnail

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.


제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • 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
    }
}

뭔가 무식하게 푼 느낌이 들지만

일단은 성공했당

풀이 과정

  1. 숫자와 부호 합치기

    빈 스트링 배열 numList를 만들어서, for문을 사용해서 i가 absolutes 의 요소일 때, signs가 ture 면 numList 에 “i”를 추가하고, false이면 “-i” 를 추가하게 했다.

  1. String List를 IntList로 변환해주기

    numList 가 String List 이기 때문에 sumList 라는 새로운 리스트를 만들어서 map 함수로 각 요소를 Int로 변환해서 넣어줬다.

  1. answersumList 의 요소를 다 더한 값을 넣어쥐

다른 사람 풀이

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 이 뭔지는 모르지만 아마도 absolutestoIntSignsArray 랑 합쳐서 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면 answerabsolutes 수를 더하고

signs가 false면 answerabsolutes 수를 빼서 간단하게 완성하심

차라리 나도 위 처럼 확장함수 써서 못 풀 거면 이렇게 푸는게 나았을것 같기도 하다.


오늘 안 것

  1. if 문에 Boolean이나 BooleanArray를 넣을 때는 == ture 이런거 없이 걍 이름만 넣어줘도 알아서 처리한다는 것을 깨달음
profile
오리너구리입니다

0개의 댓글