dmswl
[프로그래머스 LV2] 최솟값 만들기 본문
문제 이해
만약, 배열 A의 최솟값 < 배열 B의 최솟값:
배열 A의 최솟값이랑 배열 B의 최댓값을 곱해줘야 함.
만약, 배열 A의 최솟값 > 배열 B의 최솟값:
배열 B의 최솟값이랑 배열 A의 최댓값을 곱해줘야 함.
문제 풀이 방향
1. A에서 최솟값 찾고 B에서 최솟값 찾아서 비교
2. 둘 중 더 작은 최솟값을 가지는 배열에서 최솟값을 선택하고, 나머지 배열에서 최댓값 선택
3. 꺼낸 값은 지우기 - 여기서 내림차순으로 정렬한 데크로 구현.
(만약 최솟값을 안꺼냈다면, 다시 append 하기 -> 방금 꺼낸 자리에 append 해야하므로 내림차순 정렬 & pop() 이용)
4. 1,2,3 과정 반복
from collections import deque
def solution(A,B):
answer = 0
# 0. 내림차순으로 정렬한 deque 만들기
A.sort()
B.sort()
A = deque(A[::-1])
B = deque(B[::-1])
# 1. A에서 최솟값 찾고 B에서 최솟값 찾아서 비교
a = A.pop()
b = B.pop()
while A:
if a < b:
B.append(b) # 최솟값 아닌 원소는 다시 집어넣기
answer += a*B[0] # 최솟값과 최댓값 곱해서 누적합하기
else:
A.append(a)
answer += b*A[0]
return answer
너무 복잡하게 품 -> 시간 초과
단순히 한 배열은 오름차순, 한 배열은 내림차순해서 정렬한 다음 같은 인덱스끼리 곱해주면 됨.
def solution(A,B):
return sum([n_pair[0] * n_pair[1] for n_pair in zip(sorted(A), sorted(B, reverse=True))])
'코테 공부 > 알고리즘' 카테고리의 다른 글
[문자열 처리] 1. 정규 표현식 (0) | 2023.06.24 |
---|---|
[프로그래머스 LV2] 올바른 괄호 (0) | 2023.04.13 |
[프로그래머스 LV2] JadenCase 문자열 만들기 (0) | 2023.04.12 |
[파이썬 문법] sort, sorted 등 (0) | 2023.04.12 |
[백준] 23971. ZOAC 4 (0) | 2023.04.12 |
Comments