행은 서로 다른 리스트로 만들어요
2D 리스트와 행·열을 배웠어요. 칸의 값 0은 미표시, 1은 표시 완료를 뜻하도록 정해요. 아래는 2행 3열의 빈 격자를 만드는 코드예요.
board = []
for row in range(2):
line = [0] * 3
board.append(line)
board[0][1] = 1
첫 행은 [0, 1, 0], 둘째 행은 [0, 0, 0]이에요. 반복마다 line을 새로 만들어 두 행이 독립돼요. 한 행을 만든 뒤 같은 리스트를 두 번 append 하면 두 행이 같은 객체를 가리켜요. 그림에서 둘째 행은 바뀌지 않는 것을 확인해요.
요청 횟수와 표시한 칸 수는 달라요
같은 칸의 표시를 다시 요청할 수 있어요. board[0][1]에 1을 또 저장해도 이미 1인 상태예요. 요청이 세 번이어도 (0, 1), (0, 1), (1, 2)라면 표시한 칸은 두 개예요.
모든 요청을 처리한 뒤 격자의 각 칸을 읽고 값 1인 칸을 세면 중복을 따로 셀 필요가 없어요. 처리 중에 개수를 늘리려면 그 칸이 처음 표시되는지도 확인해야 해요. 아래 과제의 좌표는 모두 격자 안이라 별도의 좌표 보정은 하지 않아요.
직접 풀어봐요
처음에는 모든 칸이 미표시예요. 주어진 좌표의 칸을 표시한 뒤 서로 다른 표시 칸 수를 출력해요. 중복 요청은 같은 칸을 다시 표시할 뿐이에요.
첫 줄 rows, 둘째 줄 columns(각 110), 셋째 줄 요청 수 m(0100)이에요. 이후 각 요청 은행 r 한 줄, 열 c 한 줄이며 0 ≤r<rows, 0 ≤c<columns예요. 출력은 표시 칸 수예요.
예시 1: 2×3, 요청[(0, 1),(0, 1),(1, 2)] → 2예요.
예시 2: 1×2, 요청[(0, 0),(0, 1)] → 2예요.
예시 입력
2 3 3 0 1 0 1 1 2
예상 결과
2
예시 입력
1 2 2 0 0 0 1
예상 결과
2
핵심 개념
array-2d: 독립된 행 리스트에 칸의 상태를 저장하고, 요청 횟수와 서로 다른 칸 수를 구분해요.