반응형
https://www.acmicpc.net/problem/5692
5692번: 팩토리얼 진법
상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다.
www.acmicpc.net
수를 String으로 받아서 계산해줌
factorial 메소드 구현 >> 최대 5의 길이여서 아예 값을 저장한 배열을 구현해도 좋았을 것 같다.
메모리 : 25240 KB
시간 : 340 ms
코드길이 : 683 B
[내 코드]
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 sb = new StringBuilder();
while(true) {
String N = br.readLine();
int result = 0;
if(N.equals("0"))
break;
//char형을 int형으로 바꾸려면 '0'을 빼줘야 함
for(int i = 0; i < N.length(); i++) {
result += (N.charAt(i) - '0')*factorial(N.length() - i);
}
sb.append(result).append('\n');
}
System.out.print(sb);
}
public static int factorial(int num) {
if(num == 1)
return 1;
return num * factorial(num - 1);
}
}
1등 코드
메모리 : 29604 KB
시간 : 220 ms
코드 길이 : 741 B
[1등 코드]
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private static final String TERMINATE = "0";
private static final String NEW_LINE = "\n";
private static final int[] FACTORIAL = {1, 2, 6, 24, 120};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
String num = br.readLine();
if (TERMINATE.equals(num)) break;
int res = 0;
int leng = num.length() - 1;
for(char tmp : num.toCharArray()) {
res += ((tmp - '0') * FACTORIAL[leng--]);
}
sb.append(res).append(NEW_LINE);
}
System.out.println(sb.toString());
}
}
반응형
'알고리즘 > 수학' 카테고리의 다른 글
[백준] 10250 : ACM 호텔 (0) | 2023.03.31 |
---|---|
[백준] 2839 : 설탕배달 (0) | 2023.03.31 |