문제 설명
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
제한사항
- 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.
입출력 예
arr1 | arr2 | return |
[[1, 2], [2, 3]] | [[3, 4], [5, 6]] | [[4, 6], [7, 9]] |
[[1], [2]] | [[3], [4]] | [[4], [6]] |
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[0].length; j++) {
answer[i][j] = arr1[i][j] + arr2[i][j];
}
}
return answer;
}
}
이차원 배열끼리 더하는 문제입니다.
바깥 for문이 arr1의 길이만큼 순회합니다. 이는 행의 자리가 될 것입니다. 안쪽 for문이 arr1의 0번 인덱스의 길이만큼 순회합니다. 이는 열의 자리가 될 것입니다. answer[i][j]에는 arr1과 arr2를 각각 더한 값을 할당합니다.
class Solution {
public int[][] solution(int[][] arr1, int[][] arr2) {
int[][] answer = new int[arr1.length][arr1[0].length];
int i = 0;
for (int[] row: arr1) {
int j = 0;
for (int col: row) {
answer[i][j] = col + arr2[i][j];
j++;
}
i++;
}
return answer;
}
}
같은 문제를 for-each 방식으로 표현했습니다. answer의 값은 동일하므로 같은 방식으로 생성합니다. 다만 for-each에서 i와 j같은 변수는 사용하지 않기 때문에 임의로 생성합니다. 바깥 for문에서는 arr1을(각 행을 저장하는 row), 안쪽 for문에서는 row를(각 행에 해당하는 열을 저장하는 col) 접근합니다. arr2[i][j]에 col을 더한 값을 answer[i][j]에 할당합니다.
바깥 for문이 한 번 순회하는 동안에 안쪽 for문은 여러 번 순회합니다. 따라서 j가 먼저 증가하고, 안쪽 for문의 순회가 끝나면 바깥 for문에서 i가 증가합니다. 이 과정을 반복하여 결과를 도출할 것입니다.
'프로그래머스 > Lv. 1' 카테고리의 다른 글
[프로그래머스 코딩테스트] K번째수(Java) (0) | 2023.05.29 |
---|---|
[프로그래머스 코딩테스트] 제일 작은 수 제거하기(Java) (0) | 2023.05.22 |
[프로그래머스 코딩테스트] 수박수박수박수박수박수?(Java) (0) | 2023.04.17 |
[프로그래머스 코딩테스트] 소수 찾기(Java) (2) | 2023.04.16 |
[프로그래머스 코딩테스트] 2016년(Java) (0) | 2023.04.15 |