개발자 톡

연습문제 톡 지우는 소수를 좋아해

지우는 소수를 좋아해 추가 테스트케이스 부탁드립니다.

등록일
2021-10-02 22:56:02
조회수
922
작성자
0metal

2, 9, 10, 12 테스트 케이스 오답 나오는데 디버깅이 어렵네요.

그리고 아래 코드입력에서 #include 다 깨져서 안보이는 것 같습니다.



 
#include
#include
#include
#include
#include

#define INT_MAX 1000000001

using namespace std;

int N, M;
unordered_map cost;
vector edges[10000+1];
int memo[10000+1];
bool visited[10000+1];

int traverse(int cur_i){
    if(cur_i == N){
        return 0;
    }
    int &ret = memo[cur_i];
    if(ret != INT_MAX){
        return ret;
    }

    for(auto node: edges[cur_i]){
        if(!visited[node]){
            visited[node] = true;
            int tmp_res = max(traverse(node), cost[cur_i*10001 + node]);
            visited[node] = false;
            if(tmp_res == INT_MAX)
                continue;
            ret = min(ret, tmp_res);
        }
    }
    return ret;
}

int prime(int num){
    bool is_prime = false;
    while(!is_prime){
        is_prime = true;
        int rng = num/2;
        for(int i=2; i<=rng; i++){
            if(num % i == 0){
                is_prime = false;
                break;
            }
        }
        num += 1;
    }

    return max(num-1, 2);
}

int main(int argc, char** argv)
{
    fill_n(memo, 10001, INT_MAX);
    cin >> N >> M;
    for(int i=0; i> s >> d >> c;

        int idx1 = s*10001 + d;
        int idx2 = d*10001 + s;
        if(cost.find(idx1) == cost.end()){
            edges[s].push_back(d);
            edges[d].push_back(s);
            cost[idx1] = c;
            cost[idx2] = c;
        }else{
            cost[idx1] = min(cost[idx1], c);
            cost[idx2] = min(cost[idx2], c);
        }
    }
    visited[1] = true;
    cout << prime(traverse(1)+1) << endl;

    return 0;
}


* 정답코드 수정하여 업데이트 합니다.


#include
#include 
#include 
#include 

#define INT_MAX 1000000001

using namespace std;

int prime(int num){
    bool is_prime = false;
    while(!is_prime){
        is_prime = true;
        int rng = num/2;
        for(int i=2; i<=rng; i++){
            if(num % i == 0){
                is_prime = false;
                break;
            }
        }
        num += 1;
    }

    return num-1;
}

int N, M;

int main(int argc, char** argv)
{
    cin >> N >> M;
    vector>> edges(N+1);
    for(int i=0; i e(3);
        cin >> e[0] >> e[1] >> e[2];
        edges[e[0]].push_back({e[1], e[2]});
        edges[e[1]].push_back({e[0], e[2]});
    }

    vector dist(N+1, INT_MAX);
    auto comp = [](vector& a, vector& b){return a[1] > b[1];};
    priority_queue, vector>, decltype(comp)> pq(comp);
    pq.push({1, 0});
    dist[1] = 0;
    while(!pq.empty()){
        vector nc = pq.top();
        pq.pop();
        if(nc[1] > dist[nc[0]])
            continue;
        for(auto e: edges[nc[0]]){
            if(dist[e[0]] > max(nc[1], e[1])){
                dist[e[0]] = max(nc[1], e[1]);
                pq.push({e[0], dist[e[0]]});
            }
        }
    }

    cout << prime(dist[N]+1) << endl;

    return 0;
}



#지우는_소수를_좋아해
#c++

이 카테고리의 톡 더보기