티스토리 뷰

1837번: 암호제작 - 문자열의 나머지 구하기


P와 K를 입력받아 P라는 숫자가 소수 p,q의 곱으로 나타내질 때,

p와 q 중 하나라도 K보다 작은 p, q가 있을 경우 BAD와 두 소수 중 작은 소수를 출력하고

없을 경우 GOOD을 출력하면 되는 문제이다.


간단하게 생각해보면 K범위가 10^6까지 이므로 10^6까지의 모든 소수를 에라토스테네스 체를 이용하여 구한 뒤

P라는 수에 그 소수들을 하나하나 나누어 본 뒤 하나라도 나누어진다면 BAD,

안나누어진다면 GOOD을 출력하면 되는 간단한 문제이다.


이 때 문제가 되는 부분은 P의 범위가 10^100으로 int, long long 자료형으로는 받을 수 없기에

이를 문자열을 사용해서 받아야한다.


이 때 문자열을 정수로 나눈 나머지를 나머지 연산을 이용하여

ret를 나머지값이라 할 때 문자열 P를 일의 자리부터 보며

ret = (ret * 10 + (P[i] - '0')) % K

를 진행해주면 나머지 값을 구할 수 있다.


이제 ret값이 0일 경우 나누어지는 것이며 문제를 쉽게 풀 수 있다.


'문제 해결 > 백준 온라인 저지' 카테고리의 다른 글

3051번: 군사 기지  (0) 2018.08.17
3044번: 자전거 경주 준비하기  (0) 2018.08.17
2014번: 소수의 곱  (2) 2018.08.09
1351번: 무한 수열  (0) 2018.08.09
3955번: 캔디분배  (0) 2018.07.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday