최초 생성 시각: 2023-06-11 01:24:15
최근 수정 시각: 2023-07-26 23:00:49
어떤 케이스가 나올지 모르기 때문에, 모든 케이스를 고려해야함 -> brute force
필요한 자료구조.
알고리즘
알고리즘 실력향상을 위해 연습한 내용 로그입니다.
tie()
할 경우, 내부 값 활용가능.
const int max = 10;
void gen(int k)
{
vector<int> d(max);
// 3 으로 나누는 기준 마지막 3개 4진만 뽑으려고.
for (int i = 0; i < max; i++) {
d[i] = (k & 3);
k >>= 2;
}
}
for (int i = 0; i < (1 << max*2); i++) {
gen(i);
}
int go(int index, int k, vector<string> &words) {
if (k < 0) return 0;
if (index == 26) {
return count(words);
}
int ans = 0;
learn[index] = true;
int t1 = go(index+1, k-1, words);
learn[index] = false;
if (ans < t1) ans = t1;
if (index != 'a'-'a' && index != 'n'-'a' && index != 't'-'a' && index != 'i'-'a' && index != 'c'-'a') {
t1 = go(index+1, k, words);
if (ans < t1) ans = t1;
}
return ans;
}
// n = 3 이라고 가정할 때,
// 000, 001, 010, 011, 100, 101, 110, 111
// 비트를 만들어야함.
// 결국 n의 크기만큼 돌아야하고, 돌면서 0, 1을 구별해야함 그과정은 &연산자 활용
for (int i = 0; i < i << n; i++) {
for (int j = 0; j < n; j++) {
if (i & (1 << j)) {
// 1 이라면..
}
}
}
void solve(int x, int y, int cnt) {
if (cnt > ans) ans = cnt;
for (int i = 0; i < 4; i++) {
int new_x = x + dx[i];
int new_y = y + dy[i];
// 범위 안에 있고.
if (new_x >= 0 && new_y >= 0 && new_x < R && new_y < C) {
// false 일 경우, 한번도 방문 x
if (!checked[P[new_x][new_y] - 'A']) {
checked[P[new_x][new_y] - 'A'] = true;
solve(new_x, new_y, cnt+1);
checked[P[new_x][new_y] - 'A'] = false;
}
}
}
}
int solve(int x, int y) {
int ans = 0;
for (int i = 0; i < 4; i++) {
int new_x = x + dx[i];
int new_y = y + dy[i];
// 범위 안에 있고.
if (new_x >= 0 && new_y >= 0 && new_x < R && new_y < C) {
// false 일 경우, 한번도 방문 x
if (!checked[P[new_x][new_y] - 'A']) {
checked[P[new_x][new_y] - 'A'] = true;
int next = solve(new_x, new_y);
if (ans < next) ans = next;
checked[P[new_x][new_y] - 'A'] = false;
}
}
}
return ans + 1;
}
int x = z / n; // 행
int y = z % n; // 열
// square 구하는 공식 => x * n + y;
bool check(int row, int col) {
if (A[col])
return false;
if (B[row + col])
return false;
if (C[row-col+N])
return false;
return true;
}
int solve(vector<int>& a) {
int size = a.size();
if (size == 2) return 0;
int ans = 0;
int energy;
for (int i = 1; i < size - 1; i++) {
vector<int> b(a);
energy = b[i-1] * b[i+1]
b.erase(b.begin() + i);
// 확인할 포인트
energy += solve(b);
if (ans < energy)
ans = energy;
}
return ans;
}
공감하기