← 학습 코스

중복 요청에도 한 번만 표시하기

Python전체 작성형

행은 서로 다른 리스트로 만들어요

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 하면 두 행이 같은 객체를 가리켜요. 그림에서 둘째 행은 바뀌지 않는 것을 확인해요.

서로 독립된 2개 행 중 board[0][1]만 1로 바뀌고 둘째 행은 0으로 남는 관계

요청 횟수와 표시한 칸 수는 달라요

같은 칸의 표시를 다시 요청할 수 있어요. 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: 독립된 행 리스트에 칸의 상태를 저장하고, 요청 횟수와 서로 다른 칸 수를 구분해요.

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

로그인하고 풀기