본문 바로가기

Study/Algorithm

백준 #1963 : 소수경로

https://www.acmicpc.net/problem/1963

 

1963번: 소수 경로

문제 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금은 1033으로 해놨는데... 다음 소수를 무엇으로 할지 고민중이야" “그럼 8179로 해” “흠... 생각 좀 해볼게. 이 게임은 좀 이상해서 비밀번호를 한 번에 한 자리 밖에 못 바꾼단 말이야. 예를 들어 내가 첫 자리만 바꾸면 8033이 되니까 소수가 아니잖아.

www.acmicpc.net

 

 

숫자의 각 자리수 접근법:

for(int i = 0; i<4; i++){
    string str = to_string(cur);
    for(int j = 0; j<10; j++){
        str[i] = j + '0';
        int next = stoi(str);

숫자를 string으로 변환후 각 string의 자리를 숫자로 바꾸면 편하다

 

/**
 * @name: 소수경로
 * @link: https://www.acmicpc.net/problem/1963
 * @date 2020-04-30
 * @author sunmon
 * TIP: 에라토스테네스의 체 이용
**/

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
bool prime[10000];
int dist[10000];
using namespace std;

void setup(){
    memset(prime, true, sizeof(prime));
    for(int i = 2; i<100; i++){
        int sum = i+i;
        while(sum < 10000){
            prime[sum] = false;
            sum+= i;
        }
    }
}


int solve(int a, int b){
    queue<int> q;
    q.push(a);
    dist[a] = 0;

    while(!q.empty()){
        int cur = q.front();
        q.pop();
        if(cur == b) return dist[cur];

        for(int i = 0; i<4; i++){
            string str = to_string(cur);
            for(int j = 0; j<10; j++){
                str[i] = j + '0';
                int next = stoi(str);

                if(!prime[next]) continue;
                if(next < 1000 || next >= 10000) continue;
                if(dist[next] != -1) continue;
                q.push(next);
                dist[next] = dist[cur] + 1;
            }
        }
    }
    return dist[b];
}

int main(){
    setup();
    int t;
    cin >> t;
    while(t--){
        memset(dist, -1, sizeof(dist));
        int a, b;
        cin >> a >> b;
        cout << solve(a,b) << endl;
    }
}

'Study > Algorithm' 카테고리의 다른 글

[백준 #1525] 퍼즐  (0) 2020.05.05
[백준 #9663] N-Queen  (0) 2020.05.05
백준 #9019 : DSLR  (0) 2020.05.04
[백준] #10844 쉬운계단수  (0) 2020.04.15
코딩테스트에서 신경쓸 것  (1) 2020.04.05