백준|1026번|보물

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
49/136

문제설명
A 배열과 B 배열을 입력받고 B 배열은 재배열하지 않은 채 A배열만 재배치하여 A[0]*B[0]+...+A[N-1]+B[N-1}의 최솟값을 구하는 문제입니다.

작동 순서
1. 각 배열들을 입력받습니다.
2. B배열의 크기별 순서를 size 배열에 저장합니다.
3. A배열과 B배열의 크기 순서가 반대로 되도록 하고 서로 곱해서 그 값을 더해줍니다.
4. 위에서 나온 계산 결과를 출력합니다.

소스코드

import sys
N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
B = list(map(int, sys.stdin.readline().split()))
sorted_B = sorted(B)
size = [-1 for i in range(len(B))]
Sum = 0
for i in range(len(B)):
    for j in range(len(B)):
        if B[i] == sorted_B[j]:
            while True:
                if j in size:
                    j += 1
                else:
                    size[i] = j
                    break
            break
A.sort(reverse=True)
for i, j in zip(range(len(A)), size):
    Sum += A[j]*B[i]
print(Sum)

후기
문제에 나와있는데로 B배열을 건들지않고 풀었습니다. 하지만 다른 사람들의 풀이를 보니 B배열을 건드린 사람도 많은 것 같았습니다. 이런 문제를 풀 때는 문제에 적혀있는 제약조건도 상황에 따라 무시하면서 풀 수 있다는 것을 배웠고 앞으로 문제를 풀 때는 문제를 있는 그대로만 생각하지 않고 어떤 조건을 무시할 수 있고 추가할 수 있는 지도 생각을 해보면서 풀어야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글