← 실전 문제

가장자리의 경보 횟수

Python빈칸 채우기

직사각형 센서판의 각 칸에 경보 횟수 counts와 활성 상태 enabled가 있어요. 맨 위·맨 아래 행 또는 맨 왼쪽·맨 오른쪽 열에 있고 활성 상태가 1인 칸의 경보만 합해요. 모서리나 행·열이 하나뿐인 판에서도 같은 칸은 한 번만 세요.

solution(counts, enabled)가 합계를 반환하도록 빈칸을 채워 주세요.

매개변수와 반환값

  • 두 2차원 리스트의 모양은 같아요. 행·열 수는 각각 1~30이에요.
  • 경보 횟수는 0~100, 활성 상태는 0 또는 1이에요.
  • 반환값은 합계인 정수예요.

예시

  1. counts = [[1, 2, 3], [4, 50, 6], [7, 8, 9]], enabled = [[1, 1, 1], [1, 1, 0], [1, 1, 1]]이면 결과는 34이에요.
  2. counts = [[4, 5, 6]], enabled = [[1, 0, 1]]이면 결과는 10이에요.

실행용 입출력

첫 줄에 rows cols, 다음 rows줄에 경보 횟수, 그 다음 rows줄에 활성 상태를 입력해요. 한 줄에는 cols개 정수가 있어요. 합계 하나를 출력해요.

예시 입력

3 3
1 2 3
4 50 6
7 8 9
1 1 1
1 1 0
1 1 1

예상 결과

34

예시 입력

1 3
4 5 6
1 0 1

예상 결과

10
핵심 개념
  • array-2d: counts[r][c]는 r행 c열의 값이에요. len(counts)는 행 수, len(counts[0])는 열 수예요. 인덱스는 0부터 시작해요.
  • counting-aggregation: 한 칸을 한 번 방문하며 합하면 모서리가 여러 조건에 맞아도 중복되지 않아요.
  • conditionals: or는 하나라도 맞으면 참, and는 모두 맞으면 참이에요. (0, rows - 1)은 두 값을 묶은 튜플이며 in으로 어느 값과 같은지 확인할 수 있어요.

입력 하네스의 input()은 한 줄의 문자열을 읽고, .split()은 공백으로 항목을 나눠요. map(int, ...)는 각 항목을 정수로 바꾸고 list(...)는 그 결과를 리스트로 모아요. range(n)은 0부터 n-1까지 반복해요. 하네스는 함수 호출을 위한 자체 연결이며 풀이의 반환 계약과 구분해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기