<aside> 💬 lv0, 행렬, 조건 검사

행렬 조건 검사

문제 설명

M x N 크기의 정수 행렬이 주어집니다. 이 행렬의 모든 요소가 주어진 조건의 배수인지 확인하는 코드를 작성해주세요. 예를 들어, 주어진 조건이 '3'이라면, 행렬의 모든 요소가 3의 배수일 때 True를, 그렇지 않을 경우 False를 반환합니다.


제한 사항


입출력 예

입력 (행렬, 조건) 출력 (조건 만족 여부)
([[2, 4, 6], [8, 10, 12]], 2) True
([[1, 2, 3], [4, 5, 6]], 5) False
([[1, 3, 5], [7, 9, 11]], 2) False

입출력 설명

각 행렬에서 주어진 조건을 만족하는지 여부를 검사하여 True 또는 False로 결과를 반환합니다.

</aside>

😺 풀이 1. lambda 함수

def solution(data):
    matrix, div = data **#1 초기 변수 설정**
    condition = lambda x: (x % div) == 0
    for row in matrix: **#2 모든 행 순회**
        if not all(condition(value) for value in row):
            return False
    return True **#3 결과 반환**

단계별 풀이 전략

  1. 초기 변수 설정

    data의 첫번째 값을 matrix, 두번째 값을 div에 할당한다.

    conditionlambda를 이용해 함수 식을 선언한다. 만약 condition에 인자로 들어온 데이터의 각 값을 div로 나누었을때 0이라면 True, 아니라면 False를 반환한다.

  2. 모든 행 순회

    1. for문을 이용해 matrix의 모든 행 row를 순회한다.
    2. if문 안에 두번째 for문을 작성. 이떄의 for문은 row의 각 요소를 value를 통해 순회하는 방식이다. 만약 conditionvalue를 대입한 결과가 참이라면 True, 아니라면 False를 반환한다.
    3. if not all(condition(value)) → 만약 대입한 결과들 중 False가 하나라도 존재한다면, if not False가 되므로 아래 return False가 실행된다.
  3. 결과 반환

    위의 조건문을 통과했다면 모든 요소가 배수, 즉 참이라는 뜻이므로 True를 반환한다.

알아둬야 할 개념

함수 lambda

함수 all()

풀이 2. all()

def solution(data):
    return all(sum(row) % data[1] == 0 for row in data[0]) **#1,2 모든 행 순회, 결과 반환**

단계별 풀이 전략

  1. 모든 행 순회

    for문으로 모든 행을 순회한다.

    여기서 data(행렬, 조건)형식으로 주어지므로 data[0]은 행렬, data[1]은 조건을 나타낸다.

    만약 각 행의 sum값, 즉 행의 각 요소들을 더한 값이 조건값에 나누어 떨어진다면 True, 아니라면 False를 반환한다.

  2. 결과 반환

    all()에 의해서 각 행의 sum값 중 하나라도 False가 존재한다면 False, 아니라면 True를 반환한다.