TIL / 4/27 / 프로그래머스 - 행렬의 덧셈_Again
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12950
행과 열의 크기가 같은 2개의 행렬 arr1과 arr2를 입력받아
같은 행, 같은 열의 값을 더한 결과를 return하는 함수 solution을 완성하시오.
시도
해당 문제는 이미 4월 6일, 전 팀장님과 함께 풀었던 문제였지만 팀장님이 설명해주시면서 풀어주시고,
나는 거의 들으면서 따라가는 방식으로 풀었기 때문에 이번에는 혼자 힘으로 풀어보기 위해서 재도전하였다.
문제를 처음 읽었을 땐 그냥 2차원 배열을 전부 해제하고 인덱스 순서대로 값을 더해서 return 해주면 될 것 같아서 조원들과 함께 알고리즘 문제들을 풀어가면서 새롭게 알게 된 2차원 배열의 안쪽 리스트를 한 번에 풀어주는 함수를 써보았다.
# 입력 예제
arr1 =[[1,2],[2,3]]
arr2 = [[3,4],[5,6]
arr1_list = sum(arr1,[]) # [1, 2, 2, 3]
그런데 문제의 제한사항을 잠시 생각해보니.. arr1과 arr2의 행과 열이 같지만 무조건 원소의 갯수와 2차원 배열.. 리스트 속의 리스트의 갯수가 2개씩이라는 조건은 없었던 것이다..
그렇다.. 더하고 난 다음 결과를 return 할 때 다시 행과 열을 arr1, arr2의 행과 열의 갯수에 맞춰서 돌려주어야 했던 것이다.
해결
def solution(arr1,arr2):
answer = []
for i in range(len(arr1)):
dum = []
for n in range(len(arr1[i])):
a = arr1[i][n]+arr2[i][n]
dum.append(a)
answer.append(dum)
return answer
첫 for문으로 리스트 속 리스트의 갯수를 세어준 뒤 두 번째 for문으로 원소를 꺼내 더해준다.
그 후 리스트에 붙이고, 그 다음 바깥 리스트에 붙여 return.
놀랍게도 4월 6일에 전 팀장님과 풀었던 방법과 똑같다...
그 땐 이게 입문 문제인가.. 난이도가 이게 진짜 입문인가.. 했는데
한 달이 걸려서야 풀 수 있게 되었다.. ㅎ이게 맞나?
그리고 팀원이 푼 신기한 방식.. 매번 천재적이라고 생각하게 되는 사람이 늘어나는 것 같다... ;p
def solution1(arr1, arr2):
answer = [[x+y for x, y in zip(i, j)]for i, j in zip(arr1, arr2)]
return answer
난 아직 이렇게.. 일렬로 쓴 for문은 잘 못 알아보겠어서 잘은 모르겠지만 해설해주신 것을 들었을 때
처음에 내가 생각했던 것처럼 2차원 배열의 리스트를 전부 없애서 더한 다음 마지막에 리스트화 시켜서 출력하는 방식이라고 하시는데.. 이건 조금 더 분발해봐야지 ^^,,,
배운 점
4월 초에는 정말 입문 문제를 풀면서 이게 사람이 풀 수는 있나... 전 팀장님 천잰가.. 나는 평생 가도 못 풀 것 같다.. 하는 생각이 지배적이였는데 지금 이렇게 풀고 있는 것을 보면 참 스스로가 신기하기도 하고..
전에 배우던것도 나 자신이 갑자기 성장했음을 느꼈던 순간이 있었는데 정말 흔하지 않은 경험이였고 그만큼 내 시간과 노력이 느껴지는 순간이기도 했다.
사실 몇 년 전부터 의무적, 반사적으로 배우고, 활동하고, 깨어있는 하루하루를 보내면서 내가 하는 것들이 노력인지 무엇인지도 모르고 그저 타인에 비해 한 것이 무엇이 있나.. 싶은데 이렇게 갑작스레 찾아오는 성장의 흔적을 보게 될 때마다 얼떨떨하고, 민망하기도 하고.. 분에 넘치는 무언가를 얻은 것만 같다.
하지만 너무 간만에 느껴본 스스로의 성장이라서, 나도 무언가를 할 수 있고 해낼 수 있다는 것을 느껴서.
조금쯤은 털어낼 수 있을 것 같다. 이런 순간들을 느끼면서 사람들은 내일을 살아갈 에너지를 얻는 것인가 보다.