The Way

백준 2142번: 정돈된 배열 본문

PS/백준 온라인 저지

백준 2142번: 정돈된 배열

Jeonggyun 2020. 10. 11. 23:52

문제는 아주 심플하다.

N * M짜리 배열에서, 1≤i<k≤M, 1≤j<l≤N를 만족하는 모든 i, j, k, l에 대해서 A[i][j]+A[k][l]≤A[i][l]+A[k][j]가 성립하는지를 판별하는 문제이다. 문제에서도 그렇고 이 글에서도 편의상 1-index를 쓸 것이다.

 

대충 모든 경우에 대해 다 확인해보는 데에는 $O(n^2 m^2)$의 시간이 걸릴 것이라는 것을 잘 알 수 있다.

어떻게 줄일 수 있을까?

 

등식을 잘 관찰하면 특이한 성질을 확인할 수 있는데, 일종의 귀납적 성질이다.

 

j와 l의 차이가 2보다 클 때, 1≤i<k≤M, 1≤j<p<l≤N인 p에 대해 생각해보자.

A[i][j]+A[k][p]≤A[i][p]+A[k][j]

A[i][p]+A[k][l]≤A[i][l]+A[k][p]

만약 두 등식이 성립한다면, 양변을 더한 뒤 정리하면

A[i][j]+A[k][l]≤A[i][l]+A[k][j]이 성립한다.

 

다시 말해, 아래 그림에서

작은 네모 각각에 대해 위 등식이 성립한다면, 큰 하나의 네모에 대해서도 등식이 성립하는 것이다.

따라서, 모든 (i, j)와 (i + 1, j + 1) 쌍에 대해서만 위 등식이 성립하는지 확인하는 것으로 문제를 풀기 충분하다.

 

 

2142.cpp

'PS > 백준 온라인 저지' 카테고리의 다른 글

백준 18778번: Equilateral Triangles  (0) 2021.12.14
백준 18665번: IQ Test  (2) 2020.08.26
백준 인터랙티브 문제  (0) 2019.12.02
백준 1048번: 유니콘  (0) 2019.10.24
백준 1096번: 종이 접기  (0) 2019.09.20
Comments