※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 4994번 문제인 배수 찾기이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/4994
4994번: 배수 찾기
양의 정수 n이 주어졌을 때, n의 배수 중에서 0과 1로만 이루어진 m을 찾는 프로그램을 작성하시오. n은 200을 넘지 않고, m은 0보다 큰 양의 정수이며, 100자리를 넘지 않아야 한다.
www.acmicpc.net
N을 입력받고, 숫자 1에서 시작해서 뒤에 0과 1을 붙여가며 "N으로 나눈 나머지"를 방문한 적이 있는지 체크하는 식으로 BFS를 진행하는 것으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <queue>
#include <vector>
#include <string>
#include <cstring>
using namespace std;
int visited[200];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N; cin >> N;
while (N > 0) {
if (N == 1) cout << 1 << '\n';
else {
memset(visited, 0, sizeof(visited));
queue<pair<int,string>> que;
que.push({ 1,"1" });
visited[1] = 1;
while (!que.empty()) {
int current = que.front().first;
string currents = que.front().second;
que.pop();
if (current == 0) {
cout << currents << '\n';
break;
}
int temp = (current * 10) % N;
if (!visited[temp]) {
visited[temp] = 1;
que.push({ temp,currents + "0" });
}
temp = (temp + 1) % N;
if (!visited[temp]) {
visited[temp] = 1;
que.push({ temp,currents + "1" });
}
}
}
cin >> N;
}
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 1707 // C++] 이분 그래프 (0) | 2021.09.05 |
---|---|
[BOJ 4963 // C++] 섬의 개수 (0) | 2021.09.04 |
[BOJ 2410 // C++] 2의 멱수의 합 (0) | 2021.09.02 |
[BOJ 2623 // C++] 음악프로그램 (0) | 2021.09.01 |
[BOJ 12924 // C++] 멋진 숫자 쌍 (0) | 2021.08.31 |