코딩테스트/SWExpertAcademy

정곤이의 단조 증가하는 수 Python(SW Expert Academy)

멍토 2020. 4. 7.

난이도 : D3

문제번호 : 6190

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWcPjEuKAFgDFAU4&categoryId=AWcPjEuKAFgDFAU4&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

정곤이는 자신이 엄청난 수학자임을 증명하기 위해, 어떤 규칙 만족하는 수를 찾아보기로 했다.

그 규칙은 단조 증가하는 수인데, 각 숫자의 자릿수가 단순하게 증가하는 수를 말한다.

어떤 k자리 수 X = d1d2…dk 가 d1 ≤ d2 ≤ … ≤ dk 를 만족하면 단조 증가하는 수이다.

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

양의 정수 N 개 A1, …, AN이 주어진다.

 1 ≤ i < j ≤ N 인 두 i, j에 대해, Ai x Aj값이 단조 증가하는 수인 것들을 구하고 그 중의 최댓값을 출력하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N(1 ≤N ≤ 1,000) 이 주어진다.

두 번째 줄에는 N개의 정수 A1, …, AN(1 ≤ Ai ≤ 30,000) 이 공백 하나로 구분되어 주어진다.

출력

각 테스트 케이스마다 단조 증가하는 수인 Ai x Aj중에서 그 최댓값을 출력한다.

만약 Ai x Aj중에서 단조 증가하는 수가 없다면 -1을 출력한다.

예시

입력 출력

1
4
2 4 7 10

#1 28

2. 문제풀이

반복문을 돌려서 값을 곱한 다음에 곱해진 값이 단조증가인지 확인하면 된다.

곱한값이 단조증가 이면서 결과값보다 크다면 값을 갱신해준다.

 

개인적으로 문제를 이해하는게 어려웠던 문제였다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#D3 6190 정곤이의 단조 증가하는 수
 
#계산된 값이 단조증가인지 확인한다.
def check(number):
    temp_str = str(number)
    for k in range(len(temp_str)-1):
        if temp_str[k] > temp_str[k+1]:
            return False
    return True
 
= int(input())
for t in range(1, T+1):
    N = input()
    a_list = list(map(int, input().split()))
    result = -1
    for i in range(len(a_list)):
        for j in range(i+1len(a_list)):
            num = a_list[i]*a_list[j]
            #두수를 곱한값이 결과값보다 커야하고, 곱한값은 단조증가수여야 한다.
            if result < num and check(num):
                result = num
    print("#{} {}".format(t, result))

댓글

💲 광고입니다.