코딩테스트/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을 설정해 단조 증가하는 수가 없을 시 출력하도록 한다.