1. 문제 링크
https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AWcPjEuKAFgDFAU4&categoryId=AWcPjEuKAFgDFAU4&categoryType=CODE&problemTitle=&orderBy=SUBMIT_COUNT&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=1
2. 소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static StringBuilder answer = new StringBuilder();
static Reader scanner = new Reader();
static int numCount;
static int[] nums;
static void input() {
numCount = scanner.nextInt();
nums = new int[numCount];
for (int idx = 0; idx < numCount; idx++) {
nums[idx] = scanner.nextInt();
}
}
static void solution() {
int max = -1;
for (int idx = 0; idx < numCount - 1; idx++) {
for (int idx2 = idx + 1; idx2 < numCount; idx2++) {
int multipliedNumber = nums[idx] * nums[idx2];
if (isAscendingNumber(multipliedNumber)) {
max = Math.max(max, multipliedNumber);
}
}
}
answer.append(max).append('\n');
}
static boolean isAscendingNumber(int number) {
String num = String.valueOf(number);
for (int idx = 1; idx < num.length(); idx++) {
if (num.charAt(idx - 1) > num.charAt(idx)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
int T = scanner.nextInt();
for (int test = 1; test <= T; test++) {
answer.append('#').append(test).append(' ');
input();
solution();
}
System.out.print(answer);
}
static class Reader {
BufferedReader br;
StringTokenizer st;
public Reader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
}
}
3. 접근
- 주어진 정수들을 두 수씩 묶어서 곱한다.
- 두 수를 곱해서 나온 결과값이 단조 증가하는 수인지 체크한다.
- 왼쪽 자리수부터 인덱스 0이라고 했을 때, 인덱스 1부터 시작하여 바로 전 인덱스와 수를 비교한다.
- 만약 한 번이라도 현재 인덱스 수가 이전 인덱스 수보다 작은 경우가 존재한다면 이는 단조 증가하는 수가 아니다.
- 단조 증가하는 수라면 단조 증가하는 수의 최댓값을 갱신한다.