#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int INF = 1000000;
int n;
int maze[51][51];
int dist[51][51];
int dx[] = {1, 0, -1, 0};
int dy[] = {0, 1, 0, -1};
void bfs() {
deque<pair<int, int>> dq;
dq.push_back({0, 0});
dist[0][0] = 0;
while (!dq.empty()) {
int x = dq.front().first;
int y = dq.front().second;
dq.pop_front();
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < n) {
int nextDist = dist[x][y] + (maze[nx][ny] == 0 ? 1 : 0);
if (nextDist < dist[nx][ny]) {
dist[nx][ny] = nextDist;
if (maze[nx][ny] == 1) {
dq.push_front({nx, ny});
} else {
dq.push_back({nx, ny});
}
}
}
}
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
char c;
cin >> c;
maze[i][j] = c - '0';
dist[i][j] = INF;
}
}
bfs();
cout << dist[n-1][n-1] << endl;
return 0;
}
2665번
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 1000000;
vector<bool> is_prime(MAX + 1, true);
void sieve() {
is_prime[0] = is_prime[1] = false;
for (int i = 2; i * i <= MAX; i++) {
if (is_prime[i]) {
for (int j = i * i; j <= MAX; j += i) {
is_prime[j] = false;
}
}
}
}
int main() {
sieve(); // 에라토스테네스의 체로 소수를 미리 계산
while (true) {
int n;
cin >> n;
if (n == 0) break;
bool found = false;
for (int i = 3; i <= n / 2; i++) {
if (is_prime[i] && is_prime[n - i]) {
cout << n << " = " << i << " + " << (n - i) << endl;
found = true;
break;
}
}
if (!found) {
cout << "Goldbach's conjecture is wrong." << endl;
}
}
return 0;
}
6588번 모든 짝수에 대해 주어진 조건을 만족하는지 확인 가능