알고리즘/수학

[JAVA] 5692 : 팩토리얼 진법

믕비 2023. 4. 7. 20:01
반응형

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