https://www.acmicpc.net/problem/14928
제연이는 그의 생일(2000년 3월 3일)을 기념해 자신이 가장 좋아하는 수를 20000303으로 나눈 나머지를 구해 그 수만큼 잠을 자기로 했다. 제연이가 얼마나 잠을 잘 수 있을지 구하자.
첫째 줄에 제연이가 가장 좋아하는 수 N이 주어진다. (N ≤ 101,000,000)
N을 20000303으로 나눈 나머지를 출력한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; public class Num14928 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BigInteger N = new BigInteger(br.readLine()); System.out.println(N.remainder(BigInteger.valueOf(20000303))); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Num14928 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String N = br.readLine(); long remain = 0; for(int i=0; i<N.length(); i++){ remain = (remain * 10 + N.charAt(i) - '0') % 20000303; } System.out.println(remain); br.close(); } }
N의 범위를 보자마자 BigInteger를 사용할 생각을 하였다.
sout안에는 단순하게 N.remainder을 하여 계산을 시키면 바로 성공할 줄 알았는데
예상과 다르게 결과는 실패였다.
내가 실행하는 컴퓨터의 환경에서는 답이 맞지만, 백준에서는 실행되지 않기에 다른방법을 찾아보았다.
이 문제에서는 제출 결과 시간 초과가 핵심이 될 것 같다.
구글링을 통해서 나머지 연산을 하는 방법을 검색해보니 정말 하나씩 계산하여 규칙을 찾아내어 풀 수 있었다.