본문 바로가기
알고리즘 스터디/프로그래머스 스킬체크 레벨 1(끝)

[프로그래머스 스킬체크 레벨 1] 행렬의 덧셈 문제 풀이 및 설명 - 자바[Java]

by 레일라오리덕 2020. 5. 20.
728x90

https://programmers.co.kr/

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://programmers.co.kr/learn/courses/30/lessons/12950

 

문제

행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 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 = {};
        return answer;
    }
}

 

풀이 [Java]

 

안녕하세요~

오늘은 프로그래머스의 행렬 덧셈 문제를 풀어보려고 합니다!

행렬의 덧셈 문제는 아주 기본적인 것만 알면 쉽게 풀 수 있는 ★☆☆ 별 하나짜리 문제입니다!

우선, 2차원 배열인 answer를 선언해야 하는데요.

아래에서 볼 수 있다시피 행은 arr1의 길이만큼으로 지정해주고, 열은 arr의 첫번째 즉, 0번째 배열의 길이만큼으로 지정해주면 됩니다.

arr1 = [[1,2],[2,3]] 과 arr2 = [[3,4],[5,6]]를 예를 들자면,

2행↓[[1,2] 2열→

[2,3]]

이렇게 선언을 해주면 됩니다!

이렇게 answer를 선언해주고 난 후, for문을 두번 돌려 각각, [0,0], [0,1], [1,0], [1,1]을 돌 수 있게 해주면 됩니다.

쉽게 말해, i가 0일 때, [0,0], [0,1] 즉, 0과 1인 j값을 돌려주고,

i가 1일 때, [1,0], [1,1] 즉, 0과 1인 j값을 또 다시 돌게 해줍니다!

그렇게 되면, 두개의 2차원 배열이 각자의 행과 열에 맞게 더해질 수 있게 됩니다!

혹시 설명이 부족하다고 생각하시면 댓글 남겨주세요 :D

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;
    }
}

 

채점 결과 [Java]

 

 

다른 사람의 생각 [Java]

 

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        int row = Math.max(arr1.length, arr2.length);
        int col = Math.max(arr1[0].length, arr2[0].length);
        int[][] answer = new int[row][col];
        for(int i=0; i<row ; i++){
            for(int j=0; j<col; j++){
            answer[i][j] = arr1[i][j] + arr2[i][j];
            }
        }
        return answer;
    }
}

이 풀이는 다른 분의 풀이인데요.

row 즉, 열에서 arr1의 길이와 arr2의 길이의 가장 큰 값을 Math.max라는 메서드를 이용해서 구했네요.

그리고 col 즉, 행에서는 arr1[0]의 길이와 arr2[0]의 길이의 가장 큰 값을 같은 방법을 사용해서 구했습니다.

이 방법은 저도 생각하지 못했던 방법이라 공유합니다.

나머지 방법은 위의 제 풀이와 같은 방법인 것같습니다.

Math.max를 사용했다는 점이 이 풀이의 포인트인 것 같습니다.


오늘도 코로나 조심하시고, 손 자주 씻으시고! 건강해야 알고리즘 공부가 계속 할 수 있으니깐요!

오늘도 제 글을 읽어주셔서 감사합니다 :D

728x90

댓글