코팅테스트/백준 문제 모음
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