728x90
반응형
https://www.acmicpc.net/problem/1026
문제를 풀면서 몰랐던 개념
(1) [Python] 리스트 요소 꺼내기
-> pop 함수: pop은 리스트에서 맨 마지막 요소를 출력하면서 그 요소를 리스트에서 삭제하는, 즉 리스트에서 꺼내버리는 함수이다.
arr = [0, 1, 2, 3, 4, 5]
arr.pop()
print(arr)
>>> [0, 1, 2, 3, 4]
# 파이썬에서는 추가적으로 특정 위치에 있는 요소에 대해서 pop 함수를 사용할 수 있음.
arr.pop(2)
print(arr)
>>> [0, 1, 3, 4]
(2) 리스트에서 최대, 최소값을 제거하기
-> max,min 함수를 사용해서 최댓값과 최솟값을 찾고, remove 함수를 이용해서 제거하면 된다.
mylist = [1, 4, 0, 3, 2]
mylist.remove(max(mylist)) # 최댓값 제거
mylist.remove(min(mylist)) # 최솟값 제거
문제의 접근 방법
A와 B를 오름차순, 내림차순으로 정렬하여 곱하면 쉽지만 문제에서 B를 재정렬하는 것은 불가능하다고 나와있으므로 두 리스트를 합쳐서 최대, 최소값을 계산하는 방법을 생각해야 한다.
내가 막혔던 부분
B를 재정렬하지 않고 접근할 수 있는 방법.
=> "min,max,pop(or remove) 함수를 사용해 보기"
문제 풀이 방법
A와 B 배열의 길이 n을 입력받기 -> A,B 배열의 원소의 개수를 n개로 지정해주기 -> map 함수를 사용해서 A와 B 리스트에 입력 값을 저장할 수 있도록 해주기 -> A의 최댓값과 B의 최솟값을 곱한 값을 저장해 줄 리스트 arr를 선언 & 그 값을 리스트에 추가 -> remove 함수를 사용해서 방금 곱해진 A의 최댓값과 B의 최솟값을 제거해주기 -> 위와 같은 방식으로 n번 반복 -> 리스트 arr 안에 있는 원소들(max(A)*min(B)의 값들)을 더해주기
소스코드
n = int(input())
arr = []
sum = 0
A = [0 for i in range(n)]
B = [0 for i in range(n)]
A = list(map(int, input().split()))
B = list(map(int, input().split()))
if (len(A) == n) and (len(B) == n):
for i in range(n):
arr.append(max(A)*min(B))
A.remove(max(A))
B.remove(min(B))
for i in arr:
sum += i
print(sum)
728x90
반응형
'백준 write-up > 정렬 & 그리디' 카테고리의 다른 글
[백준] 점수 계산 : 2822번 - Python (0) | 2021.07.16 |
---|---|
[백준] 접미사 배열 : 11656번 - Python (0) | 2021.07.16 |
[백준] 좌표 정렬하기 2 : 11651번 - Python (0) | 2021.07.16 |
[백준] 소트인사이드 : 1427번 - Python (0) | 2021.07.15 |
[백준] ATM : 11399번 - Python (0) | 2021.07.15 |