<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>

😺 풀이 1. 중첩 for문

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 결과 반환**

단계별 풀이 전략

  1. 초기 변수 설정

    지뢰의 위치를 저장하기 위해 빈 리스트 mine_locations를 선언해준다.

  2. 모든 행과 열 순회

    중첩 for문을 통해 matrix의 모든 행과 열을 순회한다.

    1. for row in range(len(matrix)):matrix의 길이만큼. 즉 matrix는 2차원 리스트로 이루어져있으므로 각 1차원 리스트의 갯수(행)만큼 row로 순회한다.
    2. for col in range(len(matrix[row])):row의 길이만큼. 각 1차원 리스트의 요소(열)의 갯수만큼 col로 순회한다.
    3. 만약 해당 요소값이 1이라면 row값과 col값을 튜플로 묶어 mine_locations에 추가한다.
  3. 결과 반환

    모든 행과 열을 순회한 후 지뢰의 위치 mine_locations를 반환.

알아둬야 할 개념

중첩 반복문 (중첩 for문)


함수 append()

풀이 2. 컴프리헨션

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 결과 반환**

단계별 풀이 전략

  1. 모든 행과 열 순회

    1. 리스트 컴프리헨션을 이용해 mine_locations라는 이름의 리스트를 생성한다.
    2. 첫번째 for문에서 행, 행의 데이터를 뽑아내고, 행의 데이터를 기준으로 두번째 for문을 수행한다. 여기서 열, 값(각 요소)를 얻게되며 만약 이 값이 1이라면 해당 행과 열의 값을 튜플로 묶어 반환한다. enumerate(matrix)0, matrix[0], 1, matrix[1]
    3. 즉 모든 행과 열을 순회하며 값이 1인 (행, 열)값만 리스트의 요소로 추가해주는것이다.
  2. 결과 반환

    조건에 맞게 생성한 리스트 mine_locations를 결과값으로 반환한다.