#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번 모든 짝수에 대해 주어진 조건을 만족하는지 확인 가능