-
[구름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를 이용해서는 푼적은 오랜만이라 복습할 수 있어 좋았다.
'알고리즘 > 기타' 카테고리의 다른 글
[Cos pro 1급] 6차 문제3) 큰수와 작은수의 차이(java) (0) 2022.08.25 [Cos pro 1급] 6차 문제2) 단어를 순서대로 적으세요 (java) (0) 2022.08.25 [Cos pro 1급] 6차 문제1) 꽃피는 봄이 언제 오나요 (java) (0) 2022.08.25