본문 바로가기
코딩테스트

[프로그래머스 Lv.1 / Java] 내적

by 지지 2022. 2. 3.

[문제]

내적

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

제한사항

a, b의 길이는 1 이상 1,000 이하입니다.

a, b의 모든 수는 -1,000 이상 1,000 이하입니다.

입출력 예

a
b
result
[1,2,3,4]
[-3,-1,0,2]
3
[-1,0,1]
[1,0,-1]
-2

 

입출력 예 설명

입출력 예 #1

- a와 b의 내적은 1*(-3) + 2*(-1) + 3*0 + 4*2 = 3 입니다.

입출력 예 #2

- a와 b의 내적은 (-1)*1 + 0*0 + 1*(-1) = -2 입니다.


[풀이]

class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 0;
        
        for(int i = 0; i < a.length; i++){
            for(int j = 0; j<b.length; j++){
                answer += a[i] * b[i];
                break;
            }
        }
        return answer;
    }
}

1. 먼저 배열 a의 길이만큼 for문을 돌려준다.

2. 배열 b의 길이만큼 for문을 돌려준다.

- 여기선 a와 b의 길이가 똑같다는 조건이 붙었기 때문에 a의 길이만큼 돌려주어도 상관은 없다.

- 더 효율적인 코드는 느낀점을 참고........

3. 0으로 초기화 시킨 answer변수에 a[i]와 b[i]를 곱한 값을 계속 더해준다.

- 내적의 조건은 같은 index번호끼리만 곱해져야 하기 때문에, 이중for문이 계속 돌아 계속 더해지지 않도록 하기 위해 break를 걸어주었다.

4. 그렇게 같은 index끼리 곱하고, 그것들을 더한 answer 값을 return해주면 끝.


[느낀점]

이번 문제는 사실 for문만 알면 풀 수 있는 문제여서 나 역시 엄청 빨리 풀었다. 그러나 문제를 푼 직후 다른 사람의 코드를 본 순간 아.... 했다. for문을 한 번만 돌려도 충분히 답을 얻을 수 있는 문제였다.

class Solution {
    public int solution(int[] a, int[] b) {
         int answer = 0;
        for(int i=0; i<a.length; i++){
            answer += a[i]*b[i];
        }
        return answer;
    }
}

나의 경우 배열이 두 개가 주어져서 생각 없이 for문을 두 번 돌렸다. 그러다보니 같은 index번호끼리 곱한 후 이중 for문을 빠져나와야 해서 break를 걸어주었다.

그러나 같은 index번호끼리 곱하는 것이기 때문에 for문을 한 번만 써주면 당연히 같은 번호끼리만 곱해지게 될 것이고 불필요하게 break를 쓰는 일은 줄어든다.

쉬운 문제라고 너무 자신만만하게 생각을 덜 하고 푼 것 같다. 다른 사람의 풀이를 보고 뒤통수를 얻어 맞은 느낌이었지만 맞아도 싸다. 더 노력하자. 나무를 보지 말고 숲을 보는 능력을 더 키워야겠다..

댓글