
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12950
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- 행렬의 덧셈
- 행과 열의 크기가 같은 두 행렬(arr1, arr2)의 같은 행, 같은 열의 값을 서로 더한 결과
- 제한 조건) 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않음
최종 코드1
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
row = []
for j in range(len(arr1[0])):
row.append(arr1[i][j] + arr2[i][j])
answer.append(row)
return answer
최종 코드2
def solution(arr1, arr2):
return [[a + b for a, b in zip(row1, row2)] for row1, row2 in zip(arr1, arr2)]
첫 번째 시도 (실패. 오류)
def solution(arr1, arr2):
return a+b for a, b in map(arr1, arr2)
오류난 이유
1. Python의 map() 함수는 반복 가능한 자료형(iterable)의 각 요소에 함수를 적용해서 새로운 값을 만들어주는 내장 함수
- map() 함수 기본 구조
map(함수, iterable)
- 함수: 각 요소에 적용할 함수
- iterable: 리스트, 튜플 등 반복 가능한 자료형
- 반환값: map 객체 (필요하면 list()로 감싸야 출력됨)
- 예시) 두 리스트의 같은 위치끼리 더하기
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result)) # [5, 7, 9]
- map()은 여러 iterable을 병렬로 처리 가능
- 주의할 점
- map() 결과는 **map 객체**이므로 바로 출력하면 이상함
→ 꼭 list() 또는 for로 변환해야 확인 가능
- map() 결과는 **map 객체**이므로 바로 출력하면 이상함
2. return 다음에 리스트가 아닌 for 문이 그냥 나와 있는 문법 오류
접근 방법 (뭐지.. 너무 어렵다..😭)
<이중 for문 사용>
- 바깥 for문은 행을 돌게 하기
- 안쪽 for문은 열을 돌게 하기
- 각 행마다 새로운 리스트를 만들고, 열끼리 더한 값을 append 하기
def solution(arr1, arr2):
answer = []
for i in range(len(arr1)):
row = []
for j in range(len(arr1[0])):
row.append(arr1[i][j] + arr2[i][j])
answer.append(row)
return answer
코드 설명
- answer = []
- answer는 최종적으로 반환할 새 행렬(2차원 리스트)
- 비어 있는 리스트에서 시작해서, 하나씩 row를 추가
- for i in range(len(arr1)):
- arr1의 행 수만큼 반복 (arr1과 arr2 길이 동일)
- 예) arr1 = [[1,2],[2,3]]이면 len(arr1)은 2 → i는 0, 1
- row = []
- 현재 행에 해당하는 새로운 리스트
- row에다가 열끼리 더한 값을 넣어줄 예정
- for j in range(len(arr1[0])):
- 열 단위 반복
- arr1[0]은 첫 번째 행 → len(arr1[0])은 열의 개수
- 예) [1, 2] → 열은 2개 → j는 0, 1
- row.append(arr1[i][j] + arr2[i][j])
- 두 행렬의 i행 j열 요소를 더해서 row에 추가
- 예) arr1[0][1] + arr2[0][1] → 2 + 4 = 6
- answer.append(row)
- 한 줄(행)이 완성되면 그걸 answer에 추가
- return answer
- 최종적으로 완성된 answer 행렬을 반환
예시) 실행 흐름

<리스트 컴프리헨션 사용>
def solution(arr1, arr2):
return [[a + b for a, b in zip(row1, row2)] for row1, row2 in zip(arr1, arr2)]
코드 설명 (밖 → 안 순서로 이해)
- for row1, row2 in zip(arr1, arr2)
- arr1과 arr2의 각 행(row)을 하나씩 짝지어 주기
- 예:
arr1 = [[1,2], [2,3]]
arr2 = [[3,4], [5,6]]
→ zip하면:- row1 = [1,2], row2 = [3,4]
- 그다음 row1 = [2,3], row2 = [5,6]
- [a + b for a, b in zip(row1, row2)]
- 각각의 행 row1과 row2를 zip하면, 열 단위로 요소를 묶을 수 있음
- 예: zip([1,2], [3,4]) → (1,3), (2,4)
- 그리고 각 쌍을 더해서 리스트로 만들어 주기: [4, 6]
- 각각의 행 row1과 row2를 zip하면, 열 단위로 요소를 묶을 수 있음

*) 풀이 흐름 생각해보면서 많이 연습해보기!!! 할 수 있다!!!
'코딩 테스트 연습 > [프로그래머스] Python' 카테고리의 다른 글
| [LV.2] 연습문제 > 최대공약수와 최소공배수 (0) | 2025.06.26 |
|---|---|
| [LV.2] 연습문제 > 직사각형 별찍기 ⭐ (0) | 2025.06.25 |
| [LV.2] 연습문제 > 문자열 다루기 기본 (0) | 2025.06.23 |
| [LV.2] 위클리 챌린지 > 부족한 금액 계산하기 (0) | 2025.06.20 |
| [LV.2] 연습문제 > 문자열 내림차순으로 배치하기 (1) | 2025.06.19 |