For Programmer

SWEA 6190 파이썬 문제풀이(정곤이의 단조 증가하는 수) 본문

코팅테스트/백준 문제 모음

SWEA 6190 파이썬 문제풀이(정곤이의 단조 증가하는 수)

유지광이 2022. 2. 10. 15:07
728x90

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

 

SW Expert Academy

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

swexpertacademy.com

 


이 문제도 간단한 구현 문제이다. 우선 3개 이상을 뽑을려면 반복문을 3번 돌리는 것보다 재귀로 구현하는 것이 나은데 여기서는 2개만 뽑기 때문에 이중반복문으로 구현할 수 있다.

 

우선 2개를 뽑은 후에 그 곱을 문자열로 바꾸어 각각의 자리수를 검사한다. 그 후 앞의 자리수가 뒤의 자리수보다 크다면 단조가 아닌 것으로 그것이 아니라면 단조로 하여 코드를 구현해준다.

 

import sys

sys.stdin = open('input.txt', 'r')

T = int(input())

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

    N = int(input())
    array = list(map(int, input().split()))
    result = -1  # Ai * Aj 의 최댓값을 출력할 변수 (없다면 그대로 -1 출력)
    for i in range(N):  # 2개를 뽑기 위해 우선 배열의 전체를 돈다.
        for j in range(i + 1, N):  # 위의 반복문에서 정해진 인덱스의 그 다음 인덱스부터 돈다.(중복해서 뽑지 않기 위해)
            num = array[i] * array[j]  # 뽑은 2개를 곱한다.

            danjo = True  # 단조의 여부를 우선 True 설정
            for k in range(len(str(num)) - 1):  # 곱해진 숫자를 문자열로 바꾼후 각 자리수를 검사한다.
                if int(str(num)[k]) > int(str(num)[k + 1]):  # 만약 각자리수 숫자 값이 다음 자릿수에 나오는 숫자보다 크다면
                    danjo = False  # 단조가 아니므로 단조 여부를 False 후 탈출
                    break
            if danjo:  # 만약 단조라면
                if result < num:  # 그 곱의 값이 저장된 곱의 값보다 크다면
                    result = num  # 그 값을 최댓값으로 설정

    print(f'#{order} {result}')
728x90
Comments