알고리즘/기타
[구름Level] 최대 자리곱
흰싸라기
2022. 11. 1. 15:37
https://level.goorm.io/exam/49113/%EC%B5%9C%EB%8C%80-%EC%9E%90%EB%A6%AC%EA%B3%B1/quiz/1
구름LEVEL
코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이
level.goorm.io
[문제풀이 전]
우선 1~n까지 다 구하는 건 아닐 것 같고 직접 최대 곱을 구할 때를 보니,
현재 자리곱이나 9로 끝나는 경우를 비교해보면 최대곱을 찾을 수 있었다.
예를 들어, 4876은
3999, 4799, 4869, 4876를 비교하면 되고
이는
4000-1, 4800-1, 4870-1 과 같이 표현할 수 있다.
[문제풀이]
import java.io.*;
import java.util.*;
class Main {
public static int calc(int n){ // 자리곱
int x = (int)(Math.log10(n));
int div = (int)Math.pow(10, x);
int ret = 1;
while(ret>0&&n>0){
ret *= n/div;
n %= div;
div /= 10;
}
return ret;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int d = (int)(Math.log10(n));
int ans = calc(n);
for(int i=d;i>0;i--){
int nt = (int)Math.pow(10, i)*(int)(n/Math.pow(10, i))-1;
ans = Math.max(ans, calc(nt));
}
System.out.println(ans);
}
}
public static int calc(int n){} | 숫자 n의 자리곱 계산 | |
int nt | n과 가까운 9로 끝나는 숫자 (ex) n=4876, nt = 4000-1, 4800-1, 4870-1...) |
[comment]
문제 해결법을 알고나니 각 자릿수를 잘 추출하면 되는 문제였다.
자릿수 추출 문제는 꽤 풀어보긴했지만 java를 이용해서는 푼적은 오랜만이라 복습할 수 있어 좋았다.