알고리즘/기타

[구름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를 이용해서는 푼적은 오랜만이라 복습할 수 있어 좋았다.