일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- game
- MySQL
- react
- Dinosaur
- Express
- AWS
- MongoDB
- typeORM
- jest
- Sequelize
- 공룡게임
- dfs
- 자료구조
- nodejs
- TypeScript
- flask
- Nest.js
- nestjs
- Queue
- class
- JavaScript
- 게임
- 정렬
- GIT
- Python
- cookie
- mongoose
- OCR
- Bull
- Today
- Total
포시코딩
[프로그래머스][Lv.1] 행렬의 덧셈 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12950
내 풀이 A
def solution(arr1, arr2):
answer = []
for arr12 in zip(arr1, arr2):
temp = []
for x in zip(*arr12):
temp.append(sum(x))
answer.append(temp)
return answer
이번 문제에서는 지금까지 다른 사람들의 알고리즘 문제 풀이에서 봤던 몰랐던 기술들을 많이 응용해서 풀었다.
- * 연산자: Javascript에서 Spread Operator라는 이름으로 쓰는 이 방법으로 list를 개별 요소로 분리했다.
- sum(): list에 대해 sum(list)를 하여 list 모든 요소의 더한 값을 리턴시켰다.
- zip(): for문과 zip()을 같이 사용하여 각 list의 원하는 부분만 따로 빼내어 사용할 수 있었다.
예전에는 쉬운 문제라면 그냥 풀고 바로 다음 문제로 넘어갔는데
요즘 아무리 쉬운 문제라도 다른 사람은 어떻게 풀었나 보고 넘어가니까
쌓이는 경험치가 다른 것 같다.
그리고 이번 문제를 푼 것 처럼 결국에는 나한테 도움이 된다는걸 느꼈는데
다른 풀이도 한 두개만 보는걸로 그치는게 아닌 좀 더 여러 사람의 것을 보며
자료구조를 사용한다면 꼭 복습하고 넘어가는 습관을 들여야겠다.
내 풀이 B
def solution(arr1, arr2):
answer = [ [ sum(x) for x in zip(*arr12) ] for arr12 in zip(arr1, arr2) ]
return answer
내가 풀었던 코드에서 리스트 컴프리헨션만 적용해봤다.
거의 다른 코드를 베껴 만든 풀이기 때문에 익숙해지려면 실전에서 많이 시도해봐야 될 것 같다.
다른 풀이 A
def solution(arr1, arr2):
for i in range(len(arr1)):
for j in range(len(arr1[0])):
arr1[i][j] += arr2[i][j]
return arr1
zip()을 떠올리기 전에 생각했던 풀이 방법인데
좀처럼 정리가 안되어 시도하지 못한 방법이다.
다른 사람의 풀이를 보고 다시금 이렇게 풀어내봤는데
핵심은 주어지는 모든 파라미터가 arr1과 동일한 구조이기 때문에
베이스를 arr1로 잡고 for문을 구성하고
리턴할 값도 arr1의 각 요소에 더해 arr1 그 자체를 리턴할 값으로 만드는 것에 초점을 둬야했다.
나는 arr1을 중심으로 하지 않고 계속 arr2나 가상의 테스트에서의 파라미터를 생각하다보니
복잡해졌던 것 같다.
다른 풀이 B
import numpy as np
def solution(arr1, arr2):
arr1 = np.array(arr1)
arr2 = np.array(arr2)
answer = arr1 + arr2
return answer.tolist()
numpy 라이브러리는 배열을 다차원 배열로 만들어 준다.
벡터는 1차원 배열(python에서는 list)을 말하지만
엄밀히 말하면 자료구조상 벡터와 배열은 다른 개념이다.
2차원 배열도 matrix라고 부르는 것 같은데,
벡터, 배열, 행렬, vector, array, matrix, 다차원 배열 등등.. 따로 정리를 한번 해야겠다.
아무튼 이 풀이는 numpy를 활용해 푸는 방법인데
애초에 numpy를 코딩테스트에서 사용할 수 있을지 의문이다.
(내장 함수인줄 알았는데 pip install이 필요했다.)
그리고 찾아보니 2차원, 3차원 배열에 대해 다루는 방법을 numpy를 통해 다 하는 것 같은데
Javascript에서는 numpy 같은게 없어보였다.
그냥 배열 안의 배열 안의 ... 안의 배열 이런식으로 다차원 배열을 만드나?
알고리즘 문제에 다차원 배열에 관해서도 좀 나오는 것 같은데
이번에 알게된 걸 기회삼아 관련 자료구조를 한번 짚고 넘어가야 될 것 같다.
'자료구조알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스][Lv.1] 숫자 문자열과 영단어 (0) | 2022.12.25 |
---|---|
[프로그래머스][Lv.1][정렬] K번째수 (0) | 2022.12.25 |
[프로그래머스][Lv.1] 나누어 떨어지는 숫자 배열 (0) | 2022.12.24 |
[프로그래머스][Lv.1] 하샤드 수 (0) | 2022.12.24 |
[프로그래머스][Lv.1] x만큼 간격이 있는 n개의 숫자 (0) | 2022.12.23 |