본문 바로가기
TIL - 프로그래밍/Python 알고리즘

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

by chaemj97 2022. 3. 13.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWcPjEuKAFgDFAU4 

 

SW Expert Academy

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

swexpertacademy.com

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

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

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

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

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

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

 

작성하라.

 

< ❓ 생각 >


< 💻 코드 >

# 단조 증가하는가?
def check(v):
    s = str(v)
    for i in range(0,len(s)-1):
        # 하나라도 단조 증가 하지 않으면 실패
        if s[i] > s[i+1]:
            return False
    return True
# 테스트 케이스의 수
T = int(input())
for tc in range(1,T+1):
    # 정수 개수
    N = int(input())
    # N개의 정수, A1,A2,....AN
    A = list(map(int,input().split()))
    # 내림차순으로 정리
    A.sort(reverse=True)

    # 가장 큰 값
    max_value = -1
    
    # Ai * Aj 구하기 ( 인데스는 0부터!!)
    for i in range(N - 1):
        for j in range(i + 1, N):
            value = A[i] * A[j]
            # 최댓값보다 작다면 할 필요 없음
            if max_value > value:
                break
            # 단조 증가 하는가?
            if check(value):
                max_value = value
    print(f'#{tc} {max_value}')


< ❗ >

가장 먼저 찾은 단조 증가가 최댓값, 최댓값을 찾으면 멈춰도 되는데 함수로 만들었더니 계속 fail이 나온다...

728x90
반응형

댓글