Codewars 문제풀기 (03/19)

Sum of positive

  • int형 배열을 인자로 받는다.
  • 배열에서 양의 정수만 더한 값을 반환한다.
  • {1, -4, 7, 12} –> 20
  • 배열 인자가 없을경우 default는 0이다.

1. Test를 만들었다

  • 배열 요소가 없을경우 (length 0)

    • 테스트 코드
      @Test
      public void testWhenArrayIsNothingShouldReturnZero() {
        //Given : Set array length 0
        int[] given = {};
        //When : Call actual return value
        int actual = Positive.sum(given);
        //Then : should return 0
        assertEquals(0,actual);
      }
      
    
    • 실제 코드
    public class Positive {
      
      public static int sum(int[] arr) {
        int sum = 0; 
        return sum;
      }
    }
      
    
  • 배열 요소가 모두 양의 정수일 경우

    • 테스트 코드
      @Test
      public void testWhenArrayIsComprisedWithOnlyPositiveInteger() {
        //Given : Set array to comprised with only positive integer
        int[] given = {1,2,3,4,5};
        //When : Call actual return value
        int actual = Positive.sum(given);
        //Then : should sum all element and return 15
        assertEquals(15,actual);
      }
      
    
    • 실제 코드
    public class Positive {
      
      public static int sum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
          }
        }
        return sum;
      }
    }
      
    
  • 배열 요소가 양의 정수 음의 정수 모두 있을 경우

    • 테스트 코드
      @Test
      public void testWhenArrayIsComprisedWithInteger() {
        //Given : Set array to comprised with all integer
        int[] given = {1,-2,3,4,-5};
        //When : Call actual return value
        int actual = Positive.sum(given);
        //Then : Should sum only positive integer and return 8
        assertEquals(8,actual);
      }
    
    • 실제 코드
    public class Positive {
      
      public static int sum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
          if (arr[i] > 0) {
            sum += arr[i];
          }
        }
        return sum;
      }
    }
      
    
    • 배열 요소가 0 보다 클 경우만 더해주었다.
    • Success (약 10분)

2. 리팩토링

stream.filter()를 사용하면 0보다 큰 배열 요소들만 모을 수 있으니까 한줄로 끝낼 수 있겠다.

public class Positive {

  public static int sum(int[] arr) {
    return Arrays.stream(arr).filter(element -> element > 0).sum();
  }
}
  • 여태 다른 문제들을 답들을 보고 람다식에서 i, v, s 이런식으로 표현했는데, 명확하게 변수이름을 적어주는편이 좋을거 같다 element라고 표현했다.

3. 답 비교, 느낀점

Best Practice 가장 많이 받은 코드

import java.util.Arrays;
public class Positive{
    public static int sum(int[] arr){
        return Arrays.stream(arr).filter(v -> v > 0).sum();
    }
}

댓글남기기