2022-3/1일1코딩

[BOJ] 1026 python

이망고_ 2022. 9. 23. 11:57

가장 먼저 떠오른 것은

 A를 내림차순 정렬, B를 오름차순 정렬하여 range n만큼 i를 곱해주는 것.

근데 B를 재배열하지 말라고 되어 있어서 방법이 생각이 안 났다..

 

0. sum=0 을 정의해주지 않으면

 

ans 나온 것을 다 더해주고 sum을 출력해주려고 했더니

이러한 오류가 뜬다. 타입 에러 연산자를 지원해주지 못한다는 에러..

for문 밖으로 sum=0 이라고 지정해주니 연산을 시켜준다. 타입이 무엇인지 알 수 없으니 더해주지 못하나 보다

그래서 for문 밖으로 ans이든 sum이든 0이라고 명시해주는 건가 보다

 

1. 

그 다음 손으로 풀면서 생각했던 것은 배열을 안 시키더라도 A배열에서 가장 큰 수, B배열에서 가장 작은 수를 곱해준다.

그리고 다음 연산에서 이 과정을 반복해야 해주므로, 기존의 곱한 수에 사용했던 수를 빼준다, 였다.

 

python으로 어떻게 구현할 수 있을까, 연산된 수들을 어떻게 빼줄 수 있을까.

 

풀이를 참고하니 pop 연산자를 사용하라고 되어 있었다.

가장 작은 수, 큰 수를 min, max로 곱해준 후에, 이 인덱스 번호를 찾아 pop 해준다.. 

간단명료

import sys
input = sys.stdin.readline

n=int(input())
a=list(map(int, input().split()))
b=list(map(int, input().split()))

# a.sort
# b.sort(reverse=True)

# sum=0
# for i in range(n):
#     ans=a[i]*b[i]
#     sum += int(ans)
# print(sum) # sum= 0 을 안하면 이런 오류가 뜸 
# # 그래서 위에 sum=0 을 명시해줌

s=0
for i in range(n):
    s += min(a) * max(b)
    a.pop(a.index(min(a)))
    b.pop(b.index(max(b)))
print(s)

for i in range(n):

     s += min(a) * max(b)

     a.pop(a.index(min(a))

     b.pop(b.index(max(b))