SWEA 6190. 정곤이의 단조 증가하는 수 (Python, 구현, D3)

전승재·2023년 9월 29일
0

알고리즘

목록 보기
52/88

문제 접근

사실 이 문제는 문제를 이해하는데 더 시간이 걸렸다.
예제를 보면 입력이 2 4 7 10 인데 이 중 A_i X A_j 의 최대가 28이라는 게 이해가 안됐다. 입력이 2 4 7 10이면 단조인 수이고 따라서 최대값은 70이 되어야 되는거 아닌가? 라고 생각했다.
하지만 계속 문제를 보다보니 이 문제는 아래와 같았다.
2x4, 2x7, 2x10, 4x7, 4x10, 7x10을 진행한다.
결과로 8, 14, 20, 28, 40, 70이 나오게된다.
이 중 단조로운 수는 8, 14, 28이고 그 중 가장 큰 값은 28이기에 답이 28이 되는 것이다.

따라서 아래와 같이 문제 풀이 계획을 세울 수 있었다.

  • 입력의 곱들을 1자로 나열하기
  • 그 중 단조인 수를 확인하고 최댓값 갱신하기

문제 풀이

입력의 곱들을 1자로 나열하기

아래와 같이 danjo라는 리스트에 A[i]xA[j]를 넣어주었다. 이렇게 되면 모든 경우의 수의 곱이 danjo리스트에 입력된다.

for test_case in range(1, T + 1):
    N = int(input())
    A = list(map(int, input().split()))
    danjo = []
    result = -1
    for i in range(N-1):
        for j in range(i+1, N):
            danjo.append(A[i]*A[j])

그 중 단조인 수를 확인하고 최댓값 갱신하기

아래의 코드에서 isitdanjo함수는 val값이 danjo인지 확인하기 위해 만들어준 함수이다. 단조인 수라면 True를 반환, 아니라면 False를 반환한다.
따라서 단조로운 수일 때 최댓값을 저장하고 있는 result보다 크다면 result를 갱신하는 방식으로 최댓값을 구한다.

 for i, val in enumerate(danjo):
        if isitdanjo(val):
            if val>result:
                result = val
        else:
            continue

isitdanjo함수는 아래와 같다.
확인하기 편하도록 int를 str로 변환해주고 인덱스 1부터 진행하면서 단조로운 수에 위배되면 False를 return, 끝까지 돌았는데 아무 이상 없다면 True를 리턴한다.

def isitdanjo(d):
    string = str(d)
    for i in range(1, len(string)):
        if string[i-1] > string[i]:
            return False
    return True

제출 코드

T = int(input())
def isitdanjo(d):
    string = str(d)
    for i in range(1, len(string)):
        if string[i-1] > string[i]:
            return False
    return True
for test_case in range(1, T + 1):
    # 입력의 곱들 1자로 나열
    # 그중 단조 확인하면서 최댓값에 저장하기.
    N = int(input())
    A = list(map(int, input().split()))
    danjo = []
    result = -1
    for i in range(N-1):
        for j in range(i+1, N):
            danjo.append(A[i]*A[j])
    for i, val in enumerate(danjo):
        if isitdanjo(val):
            if val>result:
                result = val
        else:
            continue
    print(f'#{test_case} {result}')

0개의 댓글