문제 이해하기
숫자 n이 주어지며, 이 값은 n × n 크기 보드의 한 변 길이를 나타냅니다. 우리가 해야 할 일은 네 개의 귀퉁이(모서리)에서 시작하는 대각선 방향에 놓인 모든 셀을 삭제한 후, 남아 있는 셀의 개수를 반환하는 것입니다.
예를 들어 입력이 n = 4라면 보드는 다음과 같습니다. 여기서 X는 삭제되는 셀, O는 남는 셀입니다.
| X | O | O | X |
| O | X | X | O |
| O | X | X | O |
| X | O | O | X |
삭제되는 셀은 총 8개이므로, 출력 결과는 8이 됩니다.
해결 접근 방법
이 문제는 실제로 보드를 만들어 시뮬레이션할 필요 없이, 아래의 간단한 수식 하나로 해결할 수 있습니다.
- n*n − 2 * n + (n mod 2)
수식의 원리를 살펴보면 다음과 같습니다.
- 보드의 전체 셀 개수는 n²개입니다.
- 두 개의 대각선에는 각각 n개씩, 즉 총 2n개의 셀이 놓여 있어 이를 제거합니다.
- 만약 n이 홀수라면 두 대각선이 정중앙 셀에서 서로 겹칩니다. 이 경우 중앙 셀이 두 번 빼지므로, (n mod 2), 즉 홀수일 때 1을 다시 더해 중복을 보정해 줍니다.
구현 예시
아래는 위 수식을 파이썬으로 구현한 코드입니다.
class Solution: def solve(self, n): return n*n - 2 * n + (n%2) ob = Solution() print(ob.solve(4))
입력
4
출력
8
정리
n × n 보드에서 네 모서리의 대각선 셀을 모두 제거한 뒤 남는 셀의 개수는 n² − 2n + (n mod 2)로 계산할 수 있습니다. 짝수일 경우 단순히 n² − 2n이 되고, 홀수일 경우 중앙 셀의 중복을 보정하기 위해 1을 더한다는 점만 기억하면 됩니다.