728x90

[문제 설명]

정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

num_list result
[3, 4, 5, 2, 1] 1
[5, 7, 8, 3] 0

 

[차근 차근 생각해보기]

  1. num_list를 돌면서 num_list의 원소를 곱해주고 더해준다.
  2. sum은 제곱이 되어야 하기 때문에 제곱으로 만들어준 후
  3. multiple이 sum보다 작다면 1을 return하고 크다면 0을 리턴한다.  

 

[코드]

<수정 전>

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        int multiple = 1;
        int sum = 0;
        
        for(int i : num_list){
            multiple *= i;
            sum += i;
        }
        
        sum = (int)Math.pow(sum, 2);
        
        if(multiple < sum){
            answer = 1;
        }else{
            answer = 0;
        }

        return answer;
    }
}

 <수정 후>

class Solution {
    public int solution(int[] num_list) {

        int multiple = 1;
        int sum = 0;
        
        for(int i : num_list){
            multiple *= i;
            sum += i;
        }
        
        sum = (int)Math.pow(sum, 2);
        
        return multiple < sum ? 1 : 0;
    }
}

 

[반성할 점]

이 문제는 이틀 동안 풀지 못했다..계속 오류가 나서 Intellij에서 디버그를 돌려보았고

multiple이 0이 되었다. 그럴 수 밖에 없었다.. 처음에 multiple을 선언할때 int multiple = 0;으로하였기 때문에

아무리 곱해도 0이 나올수 밖에 없었다. 그래서 multiple을 1로 초기화 한 뒤 실행해보니 잘 작동하였다.

 

하지만 불필요한 코드가 너무 많은 것 같아 어떻게 줄여볼까 생각하던 중 삼항 연산자가 생각 났다.

삼항연산자는 (조건문) ? 참 : 거짓으로 조건문이 참일 경우 참의 값이 나오고 거짓일 경우 거짓의 값이 나오는 것이다.

그래서 multiple이 sum보다 작으면 참이기 때문에 1을 return하고 거짓일 경우 0을 return 하도록 하였다.                     

728x90

+ Recent posts