-
[백준/BOJ] 5692번 : 팩토리얼 진법 (JAVA / 자바)백준 2022. 2. 6. 21:38
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/5692
5692번: 팩토리얼 진법
상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다.
www.acmicpc.net
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
테스트 케이스의 수가 정해지지않았기 때문에 무한루프를 사용.
0 입력시 무한루프 종료.
여기서 말하는 기법이란 말그대로 719로 예를들면 (7 * 3 * 2 * 1) + (1 * 2 * 1) + (9 * 1)이다.
3 2 1 / 2 1 / 1 은 해당 자릿수 팩토리얼이다. 1은 곱하는 것에 의미가 없기때문에 코드에서는 뺀다.
처음에 기본 반복문마다 print를 해줬는데 시간이 좀 높게 나왔다. 그래소 StringBuilder를 이용해 출력해줄 값들을 저장해서 마지막에 한번에 출력해줬다. 그러니 시간이 많이 줄었다.(BufferedWriter를 이용해도 된다.)
코드는 StringBuilder만 올리고, 결과에 두가지 다 올리겠다.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //결과값을 저장할 StringBuilder StringBuilder sb = new StringBuilder(); //무한루프 while(true) { String S = br.readLine(); //S의 길이 int size = S.length(); int sum = 0; //0입력시 종료 if(S.equals("0")) break; //문자열 0인덱스부터 마지막인덱스까지 반복하는 반복문 for(int i = 0; i < S.length(); i++) { int n = S.charAt(i) - '0'; //숫자 1을 곱해주는 의미가 없기때문에 2부터 시작 //범위를 S.length()가 아닌 size로 정의한 이유는 자릿수가 //넘어갈 수록 곱해줄 최댓값도 줄어들어야하기 때문이다. for(int j = 2; j <= size; j++) { n *= j; } sum += n; size--; } //여기서 출력해도 문제는 풀 수 있지만 시간이 오래 걸린다. //System.out.println(sum); //그러니 StringBuilder를 사용한다. sb.append(sum).append("\n"); } //저장해준 결과값을 출력한다. System.out.println(sb); } }
-결과-
StringBuiler 사용 StringBuilder를 사용하지 않음 딱봐도 속도의 차이가 7배는 나고, 메모리도 상당히 많이 난다.
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 6609번 : 모기곱셈 (JAVA / 자바) (0) 2022.02.07 [백준/BOJ] 6378번 : 디지털 루트 (JAVA / 자바) (0) 2022.02.06 [백준/BOJ] 6322번 : 직각 삼각형의 두 변 (JAVA / 자바) (0) 2022.02.06 [백준/BOJ] 6131번 : 완전 제곱수 (JAVA / 자바) (0) 2022.02.06 [백준/BOJ] 5717번 : 상근이의 친구들 (JAVA / 자바) (0) 2022.02.06