[문제]
내적
길이가 같은 두 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
|
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를 쓰는 일은 줄어든다.
쉬운 문제라고 너무 자신만만하게 생각을 덜 하고 푼 것 같다. 다른 사람의 풀이를 보고 뒤통수를 얻어 맞은 느낌이었지만 맞아도 싸다. 더 노력하자. 나무를 보지 말고 숲을 보는 능력을 더 키워야겠다..
'코딩테스트' 카테고리의 다른 글
[프로그래머스 Lv.1 / Java] K번째 수 (0) | 2022.02.12 |
---|---|
[프로그래머스 Lv.1 / Java] 소수 만들기 (0) | 2022.02.07 |
[프로그래머스 Lv.1 / Java] 음양 더하기 (0) | 2022.02.05 |
[프로그래머스 Lv.1 / Java] 숫자 문자열과 영단어 (0) | 2022.01.27 |
[프로그래머스 Lv.1 / Java] 로또의 최고 순위와 최저 순위 (0) | 2022.01.26 |
댓글