파이썬 알고리즘

[파이썬] 6190 정곤이의 단조 증가하는 수

뜻 지, 깨달음 오 2022. 10. 1. 12:46

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

 

SW Expert Academy

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

swexpertacademy.com

😟정곤아;;;

 

str과 int 변환을 쓰려면은 다른 코드에서 시간을 아껴야하는 문제였다

 

1) input에서 주어진 숫자들의 곱을 조합으로 만들기 (dfs사용)

T = int(input())
 
for tc in range(1, 1+T):
    N = int(input())
    arr = list(map(int, input().split()))
    path = [0]*2
    MAX = -1
    multiples = []
    def rcr(level, start, total):
        if level == 2:
            multiples.append(total)
            return
 
        for i in range(start, len(arr)):
            rcr(level+1, i+1, total*arr[i])
 
 
    rcr(0, 0, 1)

 

2) int를 str형으로 바꾼 후, 각 자리마다 비교

비교했을때 단조증가가 아니면 flg=1으로 두고,

flg=0인 숫자만 MAX값과 비교

    for i in range(len(multiples)):
        flg = 0
        multiples[i] = str(multiples[i])
        for j in range(len(multiples[i])-1):
            if multiples[i][j]<=multiples[i][j+1]:
                continue
            else:
                flg = 1
                break
 
        if flg == 0:
            multiples[i]=int(multiples[i])
            if multiples[i]>MAX:
                MAX = multiples[i]

 

 

전체풀이)

T = int(input())
 
for tc in range(1, 1+T):
    N = int(input())
    arr = list(map(int, input().split()))
    path = [0]*2
    MAX = -1
    multiples = []
    def rcr(level, start, total):
        if level == 2:
            multiples.append(total)
            return
 
        for i in range(start, len(arr)):
            rcr(level+1, i+1, total*arr[i])
 
 
    rcr(0, 0, 1)
 
    # print(multiples)
 
    # flg_cnt =0
    for i in range(len(multiples)):
        flg = 0
        multiples[i] = str(multiples[i])
        for j in range(len(multiples[i])-1):
            if multiples[i][j]<=multiples[i][j+1]:
                continue
            else:
                flg = 1
                break
 
        if flg == 0:
            multiples[i]=int(multiples[i])
            if multiples[i]>MAX:
                MAX = multiples[i]

    print(f'#{tc} {MAX}')