코딩테스트/SWEA

[Python, 파이썬] SWEA 6190. 정곤이의 단조 증가하는 수

알코딩 2024. 10. 22. 05:13

모든 단조 증가하는 수 중 최댓값을 찾는 문제.

 

 

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

수열 A가 주어질 때, Ai x Aj값이 단조 증가하는 수인 것들을 구하고 그 중의 최댓값을 구해야 한다.

 

 

 

[코드]


def Up(n): # 증가하는 수열인지 체크하는 함수

    for i in range(len(n)-1):
    
        if(int(n[i]) > int(n[i+1])): # 증가하는 수열이 아닐 때
            return False

    return True   

T = int(input()) # 테스트케이스 개수 T

for test_case in range(1, T+1):

    N = int(input()) # 숫자 N
    card = list(map(int, input().split())) # N개의 수

    answer = -1 # 없으면 -1 출력

    for i in range(N):
        for j in range(i+1, N):

            mul = card[i]*card[j] # 두 수를 곱한다.

            if(Up(list(str(mul)))): # 증가하는 수면
                answer = max(answer, mul) # 최대값 갱신
                

    print("#%d %d" %(test_case, answer))
 

 

 

 

[문제풀이]


mul = card[i]*card[j] # 두 수를 곱한다.
 

 

모든 배열 각 요소에 대한 곱셈을 일단 구하고, 그게 증가하는 수면 최댓값을 갱신하면 된다.

if(int(n[i]) > int(n[i+1])): # 증가하는 수열이 아닐 때
            return False
 

증가하는 수는 이렇게 숫자의 i번째 요소가 i+1번째 요소보다 크면 증가하는 값이 아닌것!

그래서 True로 return 되는 것들 중 가장 큰 값을 구하면 끝.

 

이때 초기값은 -1을 설정해 단조 증가하는 수가 없을 시 출력하도록 한다.