보물창고 블로그

SW Expert Academy 2115. [모의 SW 역량테스트] 벌꿀채취 본문

알고리즘 풀이/SW Expert Academy

SW Expert Academy 2115. [모의 SW 역량테스트] 벌꿀채취

홋 메 2020. 3. 4. 18:26
728x90

문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V4A46AdIDFAWu

 

SW Expert Academy

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

swexpertacademy.com

해결한 코드는 아래와 같다.

def solution(map2, n, m, c):
    answer = 0
    for i in range(n):
        for j in range(n):
            if j + m - 1 < n:
                sub1 = []
                for p in range(m):
                    sub1.append(map2[i][j + p])
                for i2 in range(i, n):
                    for j2 in range(n):
                        if i2 == i and j2 <= j + m - 1:
                            continue
                        elif j2 + m - 1 < n:
                            sub2 = []
                            for p in range(m):
                                sub2.append(map2[i2][j2 + p])
                            sub = 0
                            c1 = 0
                            c2 = 0
                            c3 = 0
                            c4 = 0
                            r1 = 0
                            r2 = 0
                            r3 = 0
                            r4 = 0
                            sub1.sort(reverse=True)
                            sub2.sort(reverse=True)
                            for p1 in range(m):
                                if c1 + sub1[p1] <= c:
                                    c1 += sub1[p1]
                                    r1 += pow(sub1[p1], 2)
                                if c2 + sub1[m - 1 - p1] <= c:
                                    c2 += sub1[m - 1 - p1]
                                    r2 += pow(sub1[m - 1 - p1], 2)
                                if c3 + sub2[p1] <= c:
                                    c3 += sub2[p1]
                                    r3 += pow(sub2[p1], 2)
                                if c4 + sub2[m - 1 - p1] <= c:
                                    c4 += sub2[m - 1 - p1]
                                    r4 += pow(sub2[m - 1 - p1], 2)
                            sub += max(r1, r2) + max(r3, r4)
                            if answer < sub:
                                answer = sub
                        else:
                            continue
            else:
                continue
    return answer


t = int(input())
for test in range(1, t + 1):
    n, m, c = map(int, input().split())
    map1 = [list(map(int, input().split())) for _ in range(n)]
    ans = solution(map1, n, m, c)
    print('#{} {}'.format(test, ans))
Comments