티스토리 뷰

알고리즘/백준

백준 8111 0과 1 C++

4567은 소수 2021. 8. 3. 22:08

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

 

8111번: 0과 1

각각의 테스트 케이스마다 N의 배수이면서, 구사과가 좋아하는 수를 아무거나 출력한다. 만약, 그러한 수가 없다면 BRAK을 출력한다.

www.acmicpc.net

아이디어만 잘 떠올리면 어렵지 않은 문제였습니다.

 

조건은 다음과 같습니다. 0과 1로 이루어진 수이며 1으로 시작해야합니다. 그리고 자릿수는 100자리 이하인 수 중 입력으로 주어진 애들의 배수인 수를 구하는 것입니다.

예를 들어 17은 17 * 653= = 11101 을 만족합니다. 

만족하는 수가 없다면 BRAK을 출력시킵니다

 

처음에 100자리면 최대 2^100 경우를 나눠야하나 싶었지만 어짜피 가능성 있는 녀석들만 계산해주면 되기 때문에 bfs를 사용하였습니다.

처음에 큐에 {1, "1"} 을 넣습니다. (x = mod N의 결과, s = 원본 스트링)

그 다음부터 스트링에 "0"을 추가하는 경우 { x * 10 % N, s + "0" } 을 큐에 다시 넣고

"1"을 추가하는 경우 {(x * 10 + 1) % N, s + "1"} 을 큐에 넣습니다. 물론 mod N의 결과가 겹치는 것이 나올 것이고, 출력은 아무거나 상관없으므로 mod N의 결과를 체크하여 체킹된 경우는 넘어갑니다.

 

그리하여 mod N의 결과가 0인 경우 해당 스트링이 답 중 하나가 됩니다. (답은 여러 개 가능, 그 중 아무거나)

 

그리고 스트링의 자릿수가 100자리보다 크면 BRAK을 결과에 넣습니다.  

 

코드는 다음과 같습니다.

 

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 10266 시계 사진들 C++  (0) 2021.08.28
백준 17143 낚시왕 C++  (0) 2021.08.21
퀵소트 python3  (0) 2021.07.21
백준 2631 줄세우기  (0) 2021.07.21
백준 17822 원판 돌리기 C++  (0) 2021.07.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함