<aside>
💬 lv0
, 행렬
M x N 크기의 행렬이 주어집니다. 이 행렬은 0과 1로 구성되어 있으며, 1은 지뢰를 나타냅니다. 주어진 행렬에서 모든 지뢰의 위치를 찾아 (행, 열) 형태의 튜플로 반환하는 코드를 작성해주세요. 행과 열은 0부터 시작하는 인덱스를 사용합니다.
입력 (행렬) | 출력 (지뢰의 위치) |
---|---|
[[0, 1, 0], [1, 0, 1], [0, 1, 0]] | [(0, 1), (1, 0), (1, 2), (2, 1)] |
[[1, 1], [0, 0]] | [(0, 0), (0, 1)] |
각 행렬에서 1로 표시된 지뢰의 위치를 (행, 열) 형태의 튜플로 나타내어 리스트에 담아 반환합니다.
</aside>
def solution(matrix):
mine_locations = [] **#1 초기 변수 설정**
for row in range(len(matrix)): **#2 모든 행과 열 순회**
for col in range(len(matrix[row])):
if matrix[row][col] == 1:
mine_locations.append((row, col))
return mine_locations **#3 결과 반환**
초기 변수 설정
지뢰의 위치를 저장하기 위해 빈 리스트 mine_locations
를 선언해준다.
모든 행과 열 순회
중첩 for문을 통해 matrix
의 모든 행과 열을 순회한다.
for row in range(len(matrix)):
→ matrix
의 길이만큼. 즉 matrix
는 2차원 리스트로 이루어져있으므로 각 1차원 리스트의 갯수(행)만큼 row
로 순회한다.for col in range(len(matrix[row])):
→ row
의 길이만큼. 각 1차원 리스트의 요소(열)의 갯수만큼 col
로 순회한다.row
값과 col
값을 튜플로 묶어 mine_locations
에 추가한다.결과 반환
모든 행과 열을 순회한 후 지뢰의 위치 mine_locations
를 반환.
중첩 반복문 (중첩 for문)
for문을 두 번 이상 반복하는것으로, 이 예제에서는 모든 행과 열을 탐색하기 위해 사용되었다.
lst = [[1, 2, 3], [4, 5, 6]]
for row in lst:
for col in row:
print(col)
[1, 2, 3]
과 [4, 5, 6]
이 row
값으로 들어오고,
두번째 for문에서 각 row
의 요소, 즉 1
, 2
, 3
과 4
, 5
, 6
이 col
값으로 들어오게 된다.함수 append()
[1, 2, 3].append([4])
→ [1, 2, 3, [4]]
def solution(matrix):
mine_locations = [(row, col) for row, row_data in enumerate(matrix) for col, value in enumerate(row_data) if value == 1] **#1 모든 행과 열 순회**
return mine_locations **#2 결과 반환**
모든 행과 열 순회
mine_locations
라는 이름의 리스트를 생성한다.행, 행의 데이터
를 뽑아내고, 행의 데이터를 기준으로 두번째 for문을 수행한다.
여기서 열, 값(각 요소)
를 얻게되며 만약 이 값이 1이라면 해당 행과 열의 값을 튜플로 묶어 반환한다.
enumerate(matrix)
→ 0, matrix[0]
, 1, matrix[1]
…(행, 열)
값만 리스트의 요소로 추가해주는것이다.결과 반환
조건에 맞게 생성한 리스트 mine_locations
를 결과값으로 반환한다.