ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Q. 6190. 정곤이의 단조 증가하는 수(D3)
    코딩테스트/SWEA_Java 2023. 5. 13. 23:11

    Q. 6190. 정곤이의 단조 증가하는 수(D3)

     

    0. 문제

     

    D3 난이도의 문제이고, 구현 문제라고 생각된다.

    단조 증가하는 수는 각 숫자의 자릿수가 단순하게 증가하는 수를 말한다.

    를 들어 111566, 233359는 단조 증가하는 수이고, 12343, 999888은 단조 증가하는 수가 아니다.

    수열이 주어졌을 때 두 원소의 곱이 단조 증가하는 수인지 판단해서그중에 최대값을 출력하는 문제이다.


    1. 풀이

    1. 두 수를 곱한 뒤에 그 수가 단조 증가하는 수인지 판단한다.

    2. 만약 단조 증가하는 수인 경우 최대값을 갱신한다

    import java.util.Arrays;
    import java.util.StringTokenizer;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    class Solution
    {
        static BufferedReader br;
        static StringTokenizer st;
        static StringBuffer sb = new StringBuffer();
        static int[] inputNum;
        static int N, Max;
         
        static void input() throws IOException
        {
            N = Integer.parseInt(br.readLine());
            st = new StringTokenizer(br.readLine());
            inputNum = new int[N];
            for (int i = 0; i < N; i++) {
                inputNum[i] = -Integer.parseInt(st.nextToken());
            }
        }
         
        static void pro(int tc) {
             
            Max = -1;
            for (int i = 0; i < N - 1; i++) {
                for (int j = i + 1; j < N; j++) {
                    int num = inputNum[i] * inputNum[j];
                    if (check(num)) {
                        Max = Math.max(Max, num);
                    }
                }
            }
            sb.append(String.format("#%d %d\n", tc, Max));
        }
         
        static boolean check(int num) {
             
            int prevNum = 9;
            int curNum;
             
            while (num != 0) {
                curNum = num % 10;
                if (curNum > prevNum) {
                    return false;
                }
                num /= 10;
                prevNum = curNum;
            }
            return true;
        }
         
         
        public static void main(String args[]) throws Exception
        {
             
            //br = new BufferedReader(new FileReader(new File("res/input.txt")));
            br = new BufferedReader(new InputStreamReader(System.in));
            int T = Integer.parseInt(br.readLine());
            for(int test_case = 1; test_case <= T; test_case++)
            {
                input();
                pro(test_case);
            }
            System.out.println(sb);
        }
    }

    2. 시간복잡도 계산

     

    0) N의 최대값은 1000이고, 수열의 원소는 30000 이하이다.

    1) 수열 저장 - O(N)

    2) 풀이 1번 - O(N* (N - 1))

    따라서 시간복잡도는 약 O(N^2)이고, 시간제한은 2초이므로

    1초에 약 1억번 연산을 한다고 가정하면, 1초 이내에 풀 수 있다.


     

    반응형

    '코딩테스트 > SWEA_Java' 카테고리의 다른 글

    Q. 3750. Digit sum(D3)  (0) 2023.05.15
    Q. 1226. 미로 1(D4)  (0) 2023.05.14
    Q. 4615. 재미있는 오셀로 게임(D3)  (0) 2023.05.12
    Q. 1215. 회문(D3)  (0) 2023.05.11
    Q. 1860. 진기의 최고급 붕어빵(D3)  (2) 2023.05.10

    댓글

Designed by Tistory.