image.png

문제 설명

문제 해결 Key_point

문제 해결 아이디어

소스 코드

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int N; // 퍼즐 수
vector<int> adj[1000 * 1000 + 1]; //인접 리스트 2차원 그래프
int in_degree[1000 * 1000 + 1]; //진입 차수 배열(0인것부터 시작해야 함)
int puzzle[1001][1001];//결과를 저장하기 위한 배열
queue<int> q; //위상 정렬을 위한 큐

//퍼즐을 채우는 함수
void fill_puzzle(int loc, int num) {
    int x = (loc - 1) / N + 1;
    int y = (loc - 1) % N + 1;
    puzzle[x][y] = num;
}
//위상 정렬 함수
void topological_sort() {
    int num = 1;
    while (!q.empty()) { //큐가 빌때까지
        int curr = q.front(); //큐에 값 추출하고(현재 노드 빼기)
        q.pop();
        fill_puzzle(curr, num++); //퍼즐에 넣기
        for (int next : adj[curr]) { //현재 노드와 ㅇ녀결된 노드들의 진입 차수 감소
            in_degree[next]--;
            if (in_degree[next] == 0) q.push(next); //진입 차수가 0이면 큐에 추가
        }
    }
}

int main() {
    cin >> N;
    
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j < N; j++) {
            char sign;
            cin >> sign;
            int curr = (i - 1) * N + j;
            int right = curr + 1;
            if (sign == '>') {
                adj[right].push_back(curr);
                in_degree[curr]++;
            } else {
                adj[curr].push_back(right);
                in_degree[right]++;
            }
        }
    }

    for (int i = 1; i < N; i++) {
        for (int j = 1; j <= N; j++) {
            char sign;
            cin >> sign;
            int curr = (i - 1) * N + j;
            int down = curr + N;
            if (sign == '>') {
                adj[down].push_back(curr);
                in_degree[curr]++;
            } else {
                adj[curr].push_back(down);
                in_degree[down]++;
            }
        }
    }

    for (int i = 1; i <= N * N; i++) {
        if (in_degree[i] == 0) q.push(i);
    }

    topological_sort();

    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++) {
            cout << puzzle[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}ㄴ

소감

솔직히 혼자 풀라고 했으면 못 풀었다. 친구에게 물어보고 chatgpt에게 힌트를 달라고 해서 문제를 해결했다. 추가로 블로그 글도 참고하여 문제를 풀었다.

도움 : 박연종