본문 바로가기
공부/코딩테스트

프로그래머스/C# - 음양 더하기

by 잰쟁 2024. 6. 7.
728x90

 

 

문제 설명

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

 

 

제한사항

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

입출력 예

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

 

풀이 1)

using System;

public class Solution {
    public int solution(int[] absolutes, bool[] signs) {
        int[] arr = new int[absolutes.Length];
        int answer = 0;
        for(int i =0; i < absolutes.Length; i++){
            if(signs[i] == false)
            {
                arr[i] = absolutes[i]*(-1);
            }
            else
            {
                arr[i] = absolutes[i];
            }
            answer += arr[i];
        }
        return answer;
    }
}

 

: 처음에는 for문을 돌며 signs에서 음양을 구분한 후 바로 absolutes에 음양을 반영하는 것을 생각하지 못했다.

 따라서 새로운 배열 arr[ ]를 만들어서 그 안에 음양을 구분한 absolutes값을 넣어주고 arr[ ]의 합을 반환하는 방식으로 풀었다.

하지만 삼항연산자를 활용하여 풀 수도 있겠다는 생각이 들어 더 간단하게 다시 풀어보았다.

 

 

풀이 2)

using System;

public class Solution {
    public int solution(int[] absolutes, bool[] signs) {
        int answer = 0;
        for(int i =0; i<absolutes.Length; i++)
        {
            answer += (signs[i] == true) ? absolutes[i] : -absolutes[i];
        }
        return answer;
    }
}

 

: 위와 같이 for문을 돌리며 삼항연산자를 사용하여 signs[ ]가 true이면 absolutes[ ] 그대로를, 아니면 -absolutes[ ] 를 반환하고 반환 값을 answer에 더해준다. 

for문을 빠져나오면 answer값을 반환한다!