Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Feb 12, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/16436

🧭 풀이 시간

60+분

👀 체감 난이도

✏️ 문제 설명

  • 모든 칸이 흰색인 $H \times W$ 크기의 2차원 격자 칸에 그림을 그리려 한다.
  • 그림은 두 가지 중 하나이다.
  1. 왼쪽 위 칸이 (px,py) 이고, 오른쪽 아래 칸이 (qx,qy)인 직사각형 범위의 색을 반전시킨다.
  2. 중심점 (px,py)로부터 거리가 r 이내인 칸들의 색을 반전시킨다.
  • 색 반전이란, 흰 칸을 검은 칸으로, 검은 칸을 흰 칸으로 바꾸는 걸 말한다.
  • 그림을 다 그린 후의 격자 모습을 출력해보자.

🔍 풀이 방법

  • 그림의 개수가 많아서, 각 그림마다 직접 모든 칸을 방문할 수는 없다.
  • 2차원 배열 SQ를 정의해서, SQ[i][j]에 적힌 수만큼 직사각형 (i,j) ~ (H,W)에 그림을 그린다는 의미로 사용할 것이다.
  • 직사각형 모양의 그림 (px,py), (qx,qy)가 주어지는 경우에는 쉽게 처리할 수 있다.
  • SQ[px][py]++, SQ[qx+1][py]--, SQ[px][qy+1]--, SQ[qx+1][qy+1]++
  • 이는 2차원 상에서의 누적 합을 떠올려보면 된다.
  • 1번 그림을 한 번 그리는 시간복잡도는 $O(1)$이 되었다.

  • 문제는, 2번 그림이다.
  • 먼저, (px,py)를 관통하는 십자 모양의 범위는 앞선 SQ배열의 직사각형 처리로 구현 가능하니, 십자 모양은 제외하고 생각한다.
  • 그러면 네 개의 계단 모양이 남게 되는데, 돌리면 모두 같은 모양이니까 하나의 경우로 일반화해서 생각해보려 한다.
    image
  • 위처럼, (x,y)부터 r만큼 떨어진 계단 모양을 채우는 함수를 Stair라고 가정한다.
  • Stair(x,y,r)에서는, 크기가 r/2인 정사각형 모양을 채우고 나면, 너비가 절반으로 줄어든 계단 두 개로 나뉜다.
  • 이처럼 재귀적으로 Stair함수를 통해 그림을 그리도록 구성해 주었다.
  • 이 2번 그림을 한 번 그리는 시간복잡도는 $O(r \log{r})$이고, $r$의 최댓값을 $R$이라 하면 그림을 $K$개 처리하는데는 $O(KR\log{R})$이다.

⏳ 회고

난 저 시간복잡도면 통과할 줄 알았는데
안 된다.
저거 말고 다른 방법이 안 떠오른다 전혀

@oncsr oncsr added fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Feb 12, 2025
@oncsr oncsr self-assigned this Feb 12, 2025
@ShinHeeEul ShinHeeEul merged commit 2e79e75 into main Feb 12, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants