Gidhub BE Developer

[Programmers] 최솟값 만들기

2018-07-25
goodGid

Problem

Problem URL : 최솟값 만들기


[1] Answer Code (18. 07. 25)

int solution(vector<int> A, vector<int> B){
    int answer = 0;
    
    sort(A.begin(), A.end());
    sort(B.rbegin(), B.rend());
    
    int size = A.size();
    for(int i=0; i<size; i++){
        answer += (A[i] * B[i] );
    }
    return answer;
}
  • 어렵지 않게 풀었다.

[2] Wrong Code (21. 01. 30)

class Solution {
    public int solution(int[] A, int[] bb) {
        long answer = 0;

        Arrays.sort(A);

       // 시간 초과
       Integer[] B = Arrays.stream(bb).boxed() // [1]
                           .toArray(Integer[]::new);
       Arrays.sort(B, Collections.reverseOrder());
       for (int i = 0; i < A.length; i++) {
           answer = answer + (A[i] * B[i]);
       }

       // 시간 초과
       Integer[] B = Arrays.stream(bb).boxed()
                           .sorted(Collections.reverseOrder())
                           .toArray(Integer[]::new);
       for (int i = 0; i < A.length; i++) {
           answer = answer + (A[i] * B[i]);
       }

       // 시간 초과
       List<Integer> B = Arrays.stream(bb).boxed()
                                     .sorted(Collections.reverseOrder())
                                     .collect(Collectors.toList());

       for (int i = 0; i < A.length; i++) {
           answer = answer + (A[i] * B.get(i));
       }

        return (int) answer;
    }
}
  • [1] : bb는 Primitive Type이므로

    Stream을 사용하기 위해 Wrapper Class로 Convert 해준다.

The method boxed() is designed only for streams of some primitive types (IntStream, DoubleStream, and LongStream) to box each primitive value of the stream into the corresponding wrapper class (Integer, Double, and Long respectively).
  • 정답 풀이는 너무나 1차원적이라서 Skip하고

    Stream을 사용하니 시간 초과가 발생하는 점을 정리하려고 한다.

  • 논리적으로는 다 맞으나

    실제로 제출을 하면 특정 케이스에 대해서는 시간 초과가 발생했다.

  • 그러니 코딩 테스트를 볼 때는 Stream 문법을 자제하도록 해야겠다.


Comments

Index