1080. 행렬_시야 좁혀 그리디!

·2025년 7월 3일
0

백준 알고리즘

목록 보기
188/272

해결책

: 시야 범위를 좁혀보자.

  • 0,0 ~ 3,3 크기의 배열이 아닌 원소 1개인 0,0 값이 꼭 변경해야 하는가? 변경안해도 되는 것인가??? 를 생각해보자.
  • 변경되어야 하면 카운팅 + 1 , 변경하지 않아도 된다면 카운팅 + 0 이다.

처음 보고 , 문제해결 전략

  • 문제를 읽고 생각해보면, 시간복잡도는 2의 2500승이 나온다.
    아래의 주석 설명과 문제를 읽어보면, 된다.

-> 완탐으로는 못한다는 생각을 했고.....
음. 그 다음에는 도저히 어떻게 할지 판단을 못했다.
--> 즉 이번 문제는 틀림.

참고 자료

공부 후, 알고리즘 해결 전략

  • 문제는 a행렬과 b행렬의 뒤집는 과정을 최소한으로 해서
    만들수 있냐이다.

1) 0,0 ~ 3,3 범위에 있는 모든 원소를 뒤집지 않거나. 단 한번만 뒤집을 수 있따.
왜냐하면 0번 뒤집나, 2번 뒤집나 동일하다.
또 1번 뒤집나, 3번 뒤집나, 5번 뒤집나 동일하다.

  • 결론
    : 뒤집거나 뒤집지 않거나 인데, 위의 시간복잡도로 인해서
    2의 2500승이므로, 완탐 불가하다.
    -> 완탐으로 할 생각을 아예 버리자.

왜 그리디를 못알아챘을까??

: 완탐은 안되므로, 다른 방법을 생각해야 한다.
나는 그동안 그리디는 단순히 pq로만 처리한다고 생각했다.

  • 그리디는 모든 조건을 고려했을 때의 최적해를 선택하는 알고리즘이라고 한다.

반성문.

반성문
-> 자 문제에서 행렬 a,b의 모든 원소가 동일해야 한다고 했다.
작은 부위에서부터 시작하자.
a행렬의 0,0 원소가 0이고, b행렬의 0,0 행렬의 원소가
1이면 a행렬의 0,0 원소를 어떻게 할 것인가?
-> 변경해야 겠지????
그래야 a행렬과 b행렬이 동일할 수 있는 방법이 나오잖아.
그리고 문제를 처음보고 든 생각 최대 1번 뒤집을 수 있다.
(00 ~ 33 의 범위는)
-> 00을 제외한 나머지는 무관하고, 0,0의 최적값은 정해졌다.
이 때의 0,0은 더 이상 다른 외부조건에의 의해서 달라질 필요가 없다.

  • 이것이 그리디 방법이라고 한다.

  • 이러한 방법으로 0,0 ~ n ,m까지의 원소를 진행하는데,
    1,1 은 0,0 ~ 3,3 에 의해서 뒤집어졌지만,
    한번 더 뒤집을 수 있따.
    이 때는 1,1 ~ 4,4 순간에 뒤집어지는 것이다.

이러한 문제를 어떻게 처리할것이냐??

시야 범위를 좁히자.

오답 공부

  • 시야 범위를 좁게 보고 문제에서 최적의 뒤집는 카운팅 수를 구하는 것이다.
    시야 범위를 좁게 보면, 원소 하나하나를 보게 된다.
    0,0이 변경하는 최소 카운팅은 그냥 뒤집냐? 안 뒤집느냐??? 이다.
    -> 최적의 카운팅이 정해졌다.
  • 타겟으로 잡은 값이 변경되는 방법이 뭐가 있을까? 생각해보자.

  • 문제에서는 뒤집지 않거나, 33범위가 아닌 타겟 0,0은 최대 단 한번만 뒤집을 수 있는 방법이 있다.
    -> 뒤집는 카운팅의 최적값이 정해진다.

  • 부연 설명 이렇게 말하면 단 한번만 뒤집을수 있따?? 가 아니라.

  • 0,0 ~ 33 에 의해서 0,1도 뒤집혔는데, b행렬과 비교해보니
    달라서 0,1 ~ 3,4 뒤집어야 하는 경우가 발생할 수 있다.

  • -> 즉 타겟으로 잡은 startY, startX 는 최적의 카운팅 값이 정해진다.

profile
🔥🔥🔥

0개의 댓글