https://www.acmicpc.net/problem/1799
이 문제를 무작정 n^2으로 풀면 TLE를 받는다.
아래는 시간초과가 나는 코드이다.
한 대각선에 비숍은 하나밖에 존재할 수 없다는 것을 이용하면 복잡도를 2n-1 즉 n으로 떨어트릴 수 있을 것이다.
#include<iostream> using namespace std; int n, m[10][10]; int cnt = 0, Max = 0; bool isused1[10], isused2[10]; void func(int k) { if (Max < k) Max = k; bool isExist1 = false , isExist2 = false; for (int i = 0; i < 10; i++) { if (!isused1[i]) { isExist1 = true; break; } if (!isused2[i]) { isExist2 = true; break; } } if (!isExist1 && !isExist2) return; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (m[i][j] == 1 && !isused1[i + j] && !isused2[i - j + n - 1]) { //cnt++; isused1[i + j] = true; isused2[i - j + n - 1] = true; func(k + 1); isused1[i + j] = false; isused2[i - j + n - 1] = false; } } } return; } int main() { cin >> n; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> m[i][j]; func(0); cout << Max << '\n'; }
'알고리즘 문제 풀이 > 오답' 카테고리의 다른 글
연산자 우선 순위가 없는 경우 +, -, * 연산 구현 (0) | 2019.08.21 |
---|---|
[오답] 카카오 2018 블라인드 테스트: 무지의 먹방 라이브 C++ (0) | 2019.08.20 |
[오답] 백준 1941 소문난 칠공주 C++ (0) | 2019.08.10 |
백준 1759번: 암호 만들기 (C++) (0) | 2019.07.23 |
[오답] 백준 9663번: N-Queen (C++) (0) | 2019.07.21 |