안녕하세요. 이번에는 프로그래머스 음양 더하기를 풀어보려고 합니다.
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] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
![](https://blog.kakaocdn.net/dn/zSlwp/btsAvZdZtZ0/toE0KfaR7RDSdRWRTEmdz0/img.png)
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. 다른 사람 코드 |
![]() |
![]() |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 핸드폰 번호 가리기 Kotlin (0) | 2023.11.20 |
---|---|
[프로그래머스] 나누어 떨어지는 숫자 배열 Kotlin (2) | 2023.11.19 |
[프로그래머스] 서울에서 김서방 찾기Kotlin (0) | 2023.11.17 |
[프로그래머스] 콜라츠 추측 Kotlin (0) | 2023.11.16 |
[프로그래머스] 두 정수 사이의 합 Kotlin (0) | 2023.11.15 |