#1780 종이의 개수

princess·2021년 1월 14일
0

알고리즘

목록 보기
8/21

💯 문제 → 앞에서 풀었던 색종이 만들기와 거의 비슷한 문제 ! 하지만 이번에는 총 9개로 나눈다 아마 이 문제도 분할정복을 사용하면 될 듯

<💭 방법>

🎈 1 분할정복을 사용하는 방법

  • 들어온 입력을 모두 배열에 저장
  • 쪼갤수 있을 만큼의 최대한 작은 문제로 먼저 분할 (가로, 세로 N/3씩)
  • 반씩 분할하게 되면 총 9개의 구역이 생기는데, 구역에서 반환하는 값을 이용하여 그 구역에 같은 수가 들어있는지 확인
  • 만약 반환하는 수가 모두 같은 수라면 색종이 하나 완성
# white = -1의 개수를 셈
# blue = 0 의 개수를 셈
# black = 1의 개수를 셈

def Answer(x, y, N):
    global white, black, blue
    
    if not Paper(x, y, N) == 2:
        if Paper(x, y, N) == -1:
            white += 1

        elif Paper(x, y, N) == 0:
            blue += 1

        elif Paper(x, y, N) == 1:
            black += 1
  • 2630번에서 풀었던 것과 거의 유사하기 때문에 바뀐점 부분을 하나 고르자면 일단 이 부분은 만약 반환하는 값이 모두 같은 경우이다. 이 부분을 안해줄 경우 병합하는 과정에서 문제가 생기게 되고, 아무것도 수가 늘어나지 않도록 된다. 그래서 만약 모두 같은 숫자일 경우 반환하는 값에 따라 어떤 것의 값을 올려 줄지 결정하고 올려준다.

느낀점

이번 문제는 앞에서 푼것과 거의 유사하므로 쉽게 금방 푼 것 같다. 하지만 모두 같은 수를 반환할 경우를 생각해주어야 된다. 이 부분을 찾아내는데 까지 많은 시간이 걸리지는 않았지만 나도 머리가 빨리빨리 돌아가서 코딩하는 도중에 이런 문제점을 빨리 알아내고 틀리지 않고 풀고싶다 ㅠㅠ

profile
성장하는 머신러닝 엔지니어

0개의 댓글