본문 바로가기
프로그래머스 Algorithm

[프로그래머스] 음양 더하기 Kotlin

by Echung 2023. 11. 18.

안녕하세요. 이번에는 프로그래머스 음양 더하기를 풀어보려고 합니다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/76501

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Problem

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

 

[제한 사항]

absolutes의 길이는 1 이상 1,000 이하입니다.

  • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.

signs의 길이는 absolutes의 길이와 같습니다.

  • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
사진 1. 입출력 예

Solution

class Solution {
    fun solution(absolutes: IntArray, signs: BooleanArray): Int {
        var answer: Int = 0
        for(i in 0 until absolutes.size){
            if(signs[i]){
                answer += absolutes[i]
            }else{
                answer -= absolutes[i]
            }
        }
        return answer
    }
}

 이번 문제는 for문으로 간단하게 풀 수 있는 문제였다. 

 

1. 다른 사람 코드

class Solution {
    fun solution(absolutes: IntArray, signs: BooleanArray) =
        absolutes.foldIndexed(0) { 
        	idx, sum, num -> 
            	sum + if (signs[idx]) num else -num 
		}
}

  이번에도 다른 사람의 코드를 확인하던 중 foldIndexed() 함수를 알게 되었다. foldindexed() 함수는 fold() 함수에서 Index를 같이 가져온다는 것이 차별점입니다. 그리고 파라미터로 초기값을 받아올 수 있습니다. 그래서 이 코드를 해석해 보면

 

1. foldIndexed(0) > sum의 초기값을 0으로 받아옵니다.

2. signs[idx]가 true면 양수를 false면 음수를 sum에 더합니다.

3. 이렇게 모든 element를 다 돌고 난 후 sum을 출력합니다.


Performance

1. 내가 작성한 코드 2. 다른 사람 코드








반응형