24.02.15 TIL - 알고리즘 : 프로그래머스, 음양 더하기

JJwoo·2024년 2월 16일

알고리즘

목록 보기
11/18

1. 풀이

using System;

public class Solution {
    public int solution(int[] absolutes, bool[] signs) {
        int answer = 0;
        
        for(int i = 0; i < absolutes.Length; i++)
        {
            if(signs[i] == false)
                absolutes[i] *= -1;
            answer += absolutes[i];
        }
        
        return answer;
    }
}
  • for 반복문을 사용하여 absolutes 배열의 각 요소를 순회

  • if 조건문을 사용하여 signs[i]가 false인 경우, 즉 원래 숫자가 음수였던 경우, absolutes[i] 값을 음수로 변경

  • 변경된 absolutes[i] 값을 answer에 더함

  • 모든 요소 처리 후 answer 값 반환


2. 다른 풀이

using System;
using System.Linq;

public class Solution {
    public int solution(int[] absolutes, bool[] signs) {
        return absolutes.Zip(signs, (absolute, sign) => sign ? absolute : -absolute).Sum();
    }
}
  • Zip 메서드를 사용

absolutes와 signs 배열을 결합하고, 람다식을 통해 각 요소의 실제 값을 계산한 후, Sum 메서드로 모든 값을 합산

3. Zip ?

LINQ 제공 메서드 중 하나

  • 예시 : 두 배열이나 리스트의 각 요소를 병합하여 새로운 시퀀스를 생성할 때 사용
  1. 다른 풀이 기반 예시
int[] absolutes = { 4, 7, 12 };
bool[] signs = { true, false, true };

var result = absolutes.Zip(signs, (absolute, sign) => sign ? absolute : -absolute);
  • absolute는 absolutes 배열의 요소

  • sign은 signs 배열의 요소

  • 람다 식 (absolute, sign) => sign ? absolute : -absolute

    • sign이 true면 absolute 값을 그대로 사용하고, false면 -absolute로 바꿔서 음수 값을 생성

Zip 메서드는 두 배열의 요소들을 쉽게 병합하여 복잡한 연산을 간단하게 수행 할 수 있다.

profile
개발 모코코

0개의 댓글