안녕하세요.
이번 문제는 "최솟값 만들기" 입니다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12941
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 요약
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱하고, 곱한 값을 누적하여 더합니다.
이때최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다.
결론 : 배열 A, B가 주어질 때 최종적으로 누적된 최솟값을 return 하는 solution 함수를 작성하는 것입니다.
문제 풀이
🔍 제가 생각한 풀이 방법을 설명하자면,
1. 두 배열에서 각각 최댓값을 구한다.
2. 두 최댓값 중에 더 큰 최댓값(Max)을 가린다.
3. 최댓값이 선택되지 않은 배열에서 최솟값(Min)을 구해서 Max * Min 을 한다.
4. 곱하기를 한 값은 이미 사용된 값이므로 리스트에서 제거한다.
- 위 과정을 for문을 통해 반복하여 "누적된 최솟값"을 구한다.
✋ 여기서 잠깐!
처음에 min, max 함수를 이용해서 문제를 풀었는데 정확성은 모두 통과를 했지만, 효율성 테스트에서 시간 초과가 나고 말았습니다.
질문하기를 통해 알게된 사실이 max, min 함수는 시간복잡도가 O(n)이기 때문이었습니다.
그래서 그 부분을 시간복잡도가 O(nlogn)인 정렬함수 sort()를 이용하여 풀었더니 해결되었습니다.
전체 코드
def solution(A,B):
answer = 0
add = 0
A.sort()
B.sort()
for i in range(len(A)):
if A[-1] > B[-1]:
add = A[-1] * B[0]
A.pop()
B.pop(0)
else:
add = B[-1] * A[0]
B.pop()
A.pop(0)
answer += add
return answer'코딩테스트 연습' 카테고리의 다른 글
| [프로그래머스/Python] Lv. 2 숫자의 표현 (0) | 2023.07.29 |
|---|---|
| [프로그래머스/Python] Lv. 2 이진 변환 반복하기 (0) | 2023.07.20 |
| [프로그래머스/Python] Lv. 2 JadenCase 문자열 만들기 (0) | 2023.07.09 |
| [프로그래머스/Python] Lv. 2 프로세스 (0) | 2023.06.26 |
| [프로그래머스/Python] Lv. 2 올바른 괄호 (0) | 2023.06.25 |