728x90
📌 행렬의 덧셈
행과 열의 크기가 같은 2차원의 두 행렬을 서로 더한 결과를 반환하는 문제이다.
1️⃣ 파이썬(python) 풀이
1차원 리스트를 더할 때는 어렵지 않았는데, 2차원끼리 더하려고 하니까 조금 어려웠다.
나는 zip
함수를 사용했는데, temp
에 zip
으로 꺼내온 원소들을 더하고 빈 리스트에 append
시켰다. 한 번 돌게 되면 temp
를 다시 빈 리스트로 초기화 시키게끔 작성했다. 이 코드는 for range(len)
문을 사용하는 것보다 코드의 길이가 아주 조금 줄었지만 가독성이 좋다고 생각하지 않았다.
다른 사람의 코드 중 map
과 zip(*x)
를 활용한 코드가 마음에 들었다.map
은 리스트의 요소를 지정된 함수로 처리해주는 함수이다. 프로그래머스 문제를 풀다 보면 많이 접하는 함수이다.
zip
은 동일한 개수로 이루어진 자료형을 묶어주는 역할을 하는데, 인자를 1개로 받게되면 ([1, 2], [3, 4])
, ([2, 3], [5, 6])
처럼 동일한 index
값들을 튜플로 하나로 묶어준다.
💡 Asterisk의 사용법
*(asterisk)
는 보통 다음과 같은 상황에서 사용되는데 여기서는 unpacking
의 목적으로 사용되었다.
- 곱셈 및 거듭제곱 연산으로 사용할 때
- 리스트형 컨테이너 타입의 데이터를 반복 확장하고자 할 때
- 가변 인자 (Variadic Arguments)를 사용하고자 할 때
- 컨테이너 타입의 데이터를 Unpacking 할 때
이 코드의 풀이 순서는 다음과 같다. zip을 사용할 때는 *(asterisk)를 잘 활용하자!
for x in zip(arr1, arr2)
:([1, 2], [3, 4])
,([2, 3], [5, 6])
map(sum, zip(*x))
:unpacking
한 값([1, 2], [3, 4]
,[2, 3], [5, 6]
)에서 동일한index
끼리 더해준(sum) 값을 다시 리스트에 담는다.- 출력: [[4, 6], [7, 9]]
# 내 코드 1
def solution(arr1, arr2):
result = []
for i, j in zip(arr1, arr2):
temp = []
for k, m in zip(i, j):
temp.append(k+m)
result.append(temp)
return result
# `내 코드 1`을 comprehension으로 작성한 코드
def solution(arr1, arr2):
return [[k+m for k, m in zip(i,j)] for i, j in zip(arr1, arr2)]
# 다른 사람의 코드
def solution(arr1, arr2):
return [list(map(sum, zip(*x))) for x in zip(arr1, arr2)]
728x90
2️⃣ 자바스크립트(JS) 풀이(21. 8. 2.)
`for`문 대신 `map`을 사용하면 훨씬 가독성이 좋아진다. 또 처음 `map`에서 나온 `item`에 또 `map`을 적용해서 리스트를 벗길 수 있다. 자주 써먹어야겠다. 주의할 점은 `map`은 배열을 `return`시킨다는 점이다.
// 나의 코드
function solution(arr1, arr2, answer = []) {
const rowLength = arr1.length;
const columnLength = arr1[0].length;
for (let i = 0; i < rowLength; i++){
let tmpAnswer = [];
for (let j = 0; j < columnLength; j++){
tmpAnswer.push(arr1[i][j] + arr2[i][j])
}
answer.push(tmpAnswer)
}
return answer
}
// 수정 코드
function solution(arr1, arr2, answer = []) {
for (let i = 0; i < arr1.length; i++) {
answer[i] = [];
for (let j = 0; j < arr1[i].length; j++) {
answer[i].push(arr1[i][j] + arr2[i][j]);
}
}
return answer;
}
// 다른 사람의 코드
function solution(arr1, arr2) {
return arr1.map((item, i) => item.map((val, j) => val + arr2[i][j]))
}
반응형
'Algorithm > 프로그래머스(Programmers)' 카테고리의 다른 글
[ 자바스크립트(JS), 파이썬(python) ] 프로그래머스 level1 - 정수 제곱근 판별 (0) | 2021.04.01 |
---|---|
[ 파이썬(python) ] 프로그래머스 level1 - 자연수 뒤집어 배열 만들기 (0) | 2021.04.01 |
[ 자바스크립트(JS), 파이썬(python) ] 프로그래머스 level1 - 콜라츠 추측 (0) | 2021.03.31 |
[ 파이썬(python) ] 프로그래머스 level1 - 자릿수 더하기 (0) | 2021.03.31 |
[ 파이썬(python) ] 프로그래머스 level1 - 정수 내림차순으로 배치하기 (0) | 2021.03.31 |
댓글