코딩테스트 - 부호 판별, 음양 더하기, 숫자 더하기, C언어

728x90
반응형

숫자가 담긴 배열 absolutes

숫자의 개수(길이)가 담긴 배열 abolutes_len

숫자의 부호가 담긴 배열 signs

숫자의 부호 개수(길이)가 담긴 배열 signs_len

 

1. absoultes에 담긴 모든 숫자를 더함.

2. 부호를 판별해 fasle면 숫자를 음수로 변경하고 더함.

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// absolutes_len은 배열 absolutes의 길이입니다.
// signs_len은 배열 signs의 길이입니다.
int solution(int absolutes[], size_t absolutes_len, bool signs[], size_t signs_len) {
    int answer = 0;
    
    for(int i = 0; i < absolutes_len; i++)  {
        if(signs[i] == false)   {
            absolutes[i] = (~absolutes[i])+1; 
        }    
        answer += absolutes[i];
    }
    
    
    return answer;
}

 

나는 2의 보수를 취하는 방법으로 연산을 했다. -7을 뒤집으면 -8 여기에 1을 더하면 -7이 되는 방법.

 

다른 분들의 해결방법을 보니,

 

아래와 같은 방법들을 썼더라. 역시 세상에 똑똑한 사람이 너무 많다.

 answer += signs[i] ? absolutes[i] : -absolutes[i];

간결하다. 좋다.

 

다음 코드.

 

       if (signs[i])
            answer += absolutes[i];
        else
            answer -= absolutes[i];

부호가 음수면 숫자를 변형하지 않고 그 값을 빼버린다. 음. 똑똑해

 

다음 코드 

 

absolutes[j] = absolutes[j] * (-1);

양수에 -1을 곱하니 음수가 된다. 처음알았다.

 

- 끝 -

728x90
반응형