Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jsonb select
- DBeaver
- 서버 접근
- 1773번
- bekjoon
- 자바
- boj
- PostgreSQL
- linux
- 메뉴얼
- rocky linux
- SVN
- 백준 java jaekjoon JAVA
- 환경번수
- 제수가 0입니다
- 사용법
- java
- tomcat-users.xml
- baekjoon
- putty
- Rocky Linux 9
- poll scm
- javascript
- available plugins
- jaekjoon java
- 백준 JAVA
- subversion
- 백준
- jenkins
- ora-01476
Archives
기록하는 개발자
[백준 14928번] 큰 수 - JAVA 알고리즘 본문
14928번 |
문제 | |
제연이는 그의 생일(2000년 3월 3일)을 기념해 자신이 가장 좋아하는 수를 20000303으로 나눈 나머지를 구해 그 수만큼 잠을 자기로 했다. 제연이가 얼마나 잠을 잘 수 있을지 구하자. | |
입력 | |
첫째 줄에 제연이가 가장 좋아하는 수 N이 주어진다. (N ≤ 101,000,000) | |
출력 | |
N을 20000303으로 나눈 나머지를 출력한다. | |
예제 입력 | 예제 출력 |
20000303200003032000030320000303200003032000030320000303200003032000030320000303 | 0 |
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.regex.*;
public class Main {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
//long start = System.currentTimeMillis();
/*
BigInteger bigNumber = new BigInteger(br.readLine());
BigInteger bigNumber2 = new BigInteger("20000303");
bw.write(bigNumber.remainder(bigNumber2)+"");
*/
String num = br.readLine();
long remainder = 0;
for (int i=0; i<num.length(); i++) {
remainder = (remainder * 10 + (Character.getNumericValue(num.charAt(i)))) % 20000303;
//bw.write(remainder+"\n");
}
//long end = System.currentTimeMillis();
bw.write(remainder+"");
//bw.write("시작시간 : "+start);
//bw.write("종료시간 : "+end);
//bw.write("소요시간 : "+(end-start));
bw.close();
br.close();
}
}
큰수라서 당연히 BigInteger 를 사용했는데 시간 초과가 발생해서 어떤식으로 사용하는지 찾아봤습니다.
for문을 이용해서 입력된 수의 가장 높은 자리부터 한자리씩 추가하며 지정한 수 20000303 로 나눈 나머지를 출력해서 비교적 작은 수를 계산하기 때문에 시간이 더 적게 소요됩니다.
예제 값을 기준으로 테스트 해보았을때
시작시간 | 종료시간 | 소요시간 | |
BigInteger | 1651458138577 | 1651458147975 | 9398 |
for문 | 1651458180034 | 1651458180904 | 870 |
소요시간이 위와 같이 1/10으로 단축된 것을 볼 수 있습니다.
개인적으로 정리한 내용을 간단하게 풀어 작성했습니다. 이해가 안가는 부분은 댓글 남겨주시면 설명해드리겠습니다. |
'Baekjoon Online Judge' 카테고리의 다른 글
[백준 2675번] 문자열반복 - JAVA 알고리즘 (0) | 2022.06.08 |
---|---|
[백준 1308번] D-Day - JAVA 알고리즘 (0) | 2022.06.07 |
[백준 1264번] 모음의 개수- JAVA 알고리즘 (0) | 2022.04.26 |
[백준 3062번] 수 뒤집기 - JAVA 알고리즘 (0) | 2022.04.26 |
[백준 2609번] 최대공약수와 최소공배수 - JAVA 알고리즘 (0) | 2022.04.08 |
Comments